Mysql
如果特定數據在另一個表中可用,MySQL 觸發器以防止在一個表中更新
如果某些特定數據在另一個表中可用,我需要一個可以防止更新特定列數據的 MySQL 觸發器。
我有兩張表產品和銷售。
產品
銷售
如果 product_id 在銷售表中可用,我需要防止更新產品表中的 updated_at 列。
您可以使用以下觸發器:
DELIMITER $$ CREATE TRIGGER `product_BEFORE_UPDATE` BEFORE UPDATE ON product FOR EACH ROW BEGIN IF ((SELECT 1 FROM sale WHERE product_id=NEW.product_id)=true) THEN set @message_text = concat('Product with id: ', NEW.product_id , ' exist on Sale table'); SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = @message_text; END IF; END$$ DELIMITER ;
每次更新
product
表之前,觸發器都會檢查表product_id
上是否存在sale
並拋出如下錯誤:查詢錯誤:錯誤:ER_SIGNAL_EXCEPTION:ID 為 x 的產品存在於 Sale 表中
以下所有測試數據都可以在小提琴上找到
create table product ( product_id int, product_name varchar(15), updated_at datetime , updated_by varchar(10) ); insert into product values (1,'tv','2020-07-22 00:00:00',null), (2,'ac','2020-07-22 00:00:00',null), (3,'cycle','2020-07-22 00:00:00',null), (4,'car','2020-07-22 00:00:00',null), (5,'cooler','2020-07-22 00:00:00',null); create table sale ( sale_id int, product_id int, sale_price int, created_at datetime , created_by varchar(10) ); insert into sale values (1,1,1000,null,null), (2,2,1000,null,null), (3,3,1000,null,null); update product set updated_by ='Test' where product_id=1;
結果
Query Error: Error: ER_SIGNAL_EXCEPTION: Product with id: 1 exist on Sale table