色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql 觸發器原表不插入

錢斌斌1年前7瀏覽0評論

MySQL 觸發器是一種特殊的存儲過程,可以跨多個表執行某些操作。在使用觸發器時,會遇到一種情況,即當觸發器添加在某個表上時,如果原表執行插入操作,則觸發器中不再插入新數據。這是因為原表的插入操作觸發了觸發器,而該觸發器中又執行了插入操作,導致數據重復。

DELIMITER $$
CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
BEGIN
IF NEW.column_name = 'some value' THEN
INSERT INTO other_table (column1, column2) VALUES (NEW.column1, NEW.column2);
END IF;
END $$
DELIMITER ;

上述代碼是一個典型的 MySQL 觸發器,通過判斷原表某個字段的值是否為特定值,如果是,則在另一張表中插入對應的數據。但是,如果在該表插入新數據時觸發該觸發器,就會出現問題。因為插入新數據會觸發該觸發器,而觸發器中又會執行插入操作,導致數據重復。

為了避免出現這種情況,可以在觸發器中增加判斷條件,只有在特定條件下才執行插入操作:

DELIMITER $$
CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
BEGIN
IF NEW.column_name = 'some value' AND NOT EXISTS (SELECT * FROM other_table WHERE column1 = NEW.column1 AND column2 = NEW.column2) THEN
INSERT INTO other_table (column1, column2) VALUES (NEW.column1, NEW.column2);
END IF;
END $$
DELIMITER ;

上述代碼在觸發器中增加了 NOT EXISTS 子句,用于判斷是否已經有對應數據在另一張表中。如果該子查詢檢索到了已存在的數據,則觸發器不再執行插入操作,避免了數據重復。