【问题标题】:How to disable triggers in MySQL?如何在 MySQL 中禁用触发器?
【发布时间】:2012-11-15 21:29:58
【问题描述】:

在我的 MySQL 数据库中,我有一些触发器 ON DELETEON 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') 

这个TRICK is Explained here

【问题讨论】:

  • 在用户定义的会话变量不存在的 PHP 中执行代码时会发生什么?它会处理错误的“FALSE”还是会因变量不存在类型消息而出错。

标签: mysql database-trigger


【解决方案1】:

无法暂时禁用触发器。做一件事,使用一个全局变量。触发器将首先检查全局变量的值。在这种情况下,您可以更改全局变量的值以防止触发器工作。

【讨论】:

  • 如何创建全局变量?
猜你喜欢
  • 2011-09-22
  • 2011-04-04
  • 2011-04-25
  • 2013-02-09
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
相关资源
最近更新 更多