Mysql
是否可以修改 MySQL 中現有的觸發器定義?
我想知道是否可以在 MySQL 中更新觸發器定義。例如,我有一個觸發器 T,我想向它添加一些新功能。
我的假設是我需要刪除並重新創建它。
對於這種情況,數據庫管理的最佳實踐是什麼?
聽起來您在問是否可以在原子操作中更改觸發器,如果新定義失敗,您不會失去舊定義…類似於
CREATE OR REPLACE VIEW
,如果新定義將替換視圖定義是有效的,但如果您無法更換舊的,則將其留在原處。不幸的是,MySQL 中沒有
ALTER TRIGGER
orCREATE OR REPLACE TRIGGER
。我建議最好的做法是鎖定觸發器所在的表,因此沒有觸發器會影響任何行。允許在表被鎖定時刪除和添加觸發器。
mysql> LOCK TABLES t1 WRITE; -- the next prompt appears once you've obtained the lock mysql> DROP TRIGGER t1_bi; mysql> DELIMITER $$ mysql> CREATE TRIGGER ti_bi BEFORE INSERT ON t1 FOR EACH ROW BEGIN ... END $$ mysql> DELIMITER ; mysql> UNLOCK TABLES;
更新:MariaDB 在 10.1.4 版本中增加
CREATE OR REPLACE TRIGGER
了對 MySQL 的替代品的支持。https://mariadb.com/kb/en/mariadb/create-trigger/
Oracle 5.7 的 MySQL 仍然依賴於上述解決方案。