1

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

4

1 回答 1

0

您希望它引发错误还是要避免它?

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

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

在此处阅读有关信号的更多信息。

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

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

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

在此处阅读更多相关信息。

或者

INSERT IGNORE ....

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

在此处阅读更多相关信息。

于 2013-05-22T09:39:07.310 回答