mysql触发器disable,如何在MySQL中禁用触发器?

In my MySQL database I have some triggers ON DELETE and ON INSERT. Sometimes I need to disable some triggers, and I have to DROP e.g.

DROP TRIGGER IF EXISTS hostgroup_before_insert //

and reinstall. Is there any shortcut to SET triggers hostgroup_before_insert = 0 like we have for foreign keys:

mysql> SELECT version();

+-------------------------+

| version() |

+-------------------------+

| 5.1.61-0ubuntu0.10.10.1 |

+-------------------------+

1 row in set (0.00 sec)

EDIT Answer

There is no built-in server system variable TRIGGER_CHECKS in MySQL.

A simple workaround is to instead use a user-defined session variable.

#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')

解决方案

Its not possible to temporarly disable triggers. Do one thing, use one global variable. Trigger will first check value of global variable first. In this case you can change value of global variable to prevent working of trigger.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值