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 釋放表