Mysql

如果特定數據在另一個表中可用,MySQL 觸發器以防止在一個表中更新

  • July 30, 2022

如果某些特定數據在另一個表中可用,我需要一個可以防止更新特定列數據的 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

引用自:https://dba.stackexchange.com/questions/315030