在我的MySQL数据库中,我有一些触发器 ON DELETE
和 ON INSERT
。有时候我需要禁用一些触发器,所以我必须 DROP
它们。
DROP TRIGGER IF EXISTS hostgroup_before_insert //
重新安装。有没有像外键一样的快捷方式来SET triggers hostgroup_before_insert = 0
:
mysql> SELECT version();
+-------------------------+
| version() |
+-------------------------+
| 5.1.61-0ubuntu0.10.10.1 |
+-------------------------+
1 row in set (0.00 sec)
编辑 答案
MySQL中没有内置的服务器系统变量TRIGGER_CHECKS。
一个简单的解决方法是改用自定义的会话变量。
#FALSE value overrides trigger type settings
SET @TRIGGER_CHECKS = [TRUE|FALSE];
SET @TRIGGER_BEFORE_INSERT_CHECKS = [TRUE|FALSE];
SET @TRIGGER_AFTER_INSERT_CHECKS = [TRUE|FALSE];
DELIMITER $$
DROP TRIGGER IF EXISTS `yearCheck_beforeInsert` $$
CREATE DEFINER=`root`@`localhost` TRIGGER `yearCheck_beforeInsert`
BEFORE INSERT ON `movies` FOR EACH ROW
#Patch starts here
thisTrigger: BEGIN
IF ((@TRIGGER_CHECKS = FALSE)
OR (@TRIGGER_BEFORE_INSERT_CHECKS = FALSE))
AND (USER() = 'root@localhost')
这里解释了如何按需禁用/启用触发器的技巧。
SET @disable_trigger = NULL;
和相应的条件语句。 - undefined