If语句在多个SQL触发器中

时间:2013-05-22 09:16:26

标签: mysql triggers

我需要一些关于MySQL触发器的帮助,我猜它应该很简单。我有一个由3个表(trable1,table2,table3)组成的数据库,每个表都有两列(column1,column2)。所以这就是我需要的。如果在table1中插入一行,我希望将其自动复制到table2和table3。同样,对table2和table3进行更新。但这是一个技巧,我注意一个if条件,它检查行是否已经存在,否则SQL会抛出一个错误。我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

你想要它抛出一个错误,还是你想避免它?

在第一种情况下,您可以执行类似

的操作
IF EXISTS (SELECT 1 FROM table2or3 WHERE col1 = NEW.col1) THEN
   SIGNAL ...
END IF;

详细了解信号here

如果您不想抛出错误,也可以

INSERT INTO foo(col1, col2) VALUES (NEW.col1, NEW.col2) 
ON DUPLICATE KEY UPDATE whatever = whatever;
  

如果指定ON DUPLICATE KEY UPDATE,并且插入的行将导致UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行的UPDATE。

详细了解here

或者

INSERT IGNORE ....
  

如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告。例如,如果没有IGNORE,则复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将中止。使用IGNORE时,仍未插入行,但未发出错误。

详细了解here