Ale*_*lex 22 mysql trigger update
我想知道是否可以更新 MySQL 中的触发器定义。例如,我有一个触发器 T,我想向它添加一些新功能。
我的假设是我需要删除并重新创建它。
对于此类场景,数据库管理的最佳实践是什么?
Mic*_*bot 30
听起来您好像在问是否可以在原子操作中更改触发器,如果新定义失败,您不会丢失旧CREATE OR REPLACE VIEW定义...类似于,如果新定义替换视图定义是有效的,但如果您无法更换它,则会保留旧的。
不幸的是,MySQL 中没有ALTER TRIGGERor CREATE 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;
Run Code Online (Sandbox Code Playgroud)
更新:MariaDB 在 10.1.4 版中添加CREATE OR REPLACE TRIGGER了对 MySQL 的替代品的支持。
https://mariadb.com/kb/en/mariadb/create-trigger/
从 5.7 开始,Oracle 的 MySQL 仍然依赖于上述解决方案。