TRIGGERS
如果你已在其他 DB 上使用触发器,则需要引起注意的两点:
对于每一行
FOR EACH ROW
是语法的强制部分
你不能像 Oracle 那样创建一个语句触发器(一次通过查询)。这是一个与性能相关的问题,而不是真正缺失的功能
创建或替换触发器
MySQL 不支持 CREATE OR REPLACE
MySQL 不允许这种语法,而是使用以下内容:
DELIMITER $$
DROP TRIGGER IF EXISTS myTrigger;
$$
CREATE TRIGGER myTrigger
-- ...
$$
DELIMITER ;
小心,这不是原子事务 :
- 如果
CREATE
失败,你将失去旧触发器 - 在重载,其他操作可以发生在
DROP
和CREATE
之间,首先使用LOCK TABLES myTable WRITE;
来避免数据不一致和UNLOCK TABLES;
之后CREATE
释放表