TRIGGERS

如果你已在其他 DB 上使用触发器,则需要引起注意的两点:

对于每一行

FOR EACH ROW 是语法的强制部分

你不能像 Oracle 那样创建一个语句触发器(一次通过查询)。这是一个与性能相关的问题,而不是真正缺失的功能

创建或替换触发器

MySQL 不支持 CREATE OR REPLACE

MySQL 不允许这种语法,而是使用以下内容:

DELIMITER $$

DROP TRIGGER IF EXISTS myTrigger;
$$
CREATE TRIGGER myTrigger
-- ...

$$
DELIMITER ;

小心,这不是原子事务

  • 如果 CREATE 失败,你将失去旧触发器
  • 在重载,其他操作可以发生在 DROPCREATE 之间,首先使用 LOCK TABLES myTable WRITE; 来避免数据不一致和 UNLOCK TABLES; 之后 CREATE 释放表