web-dev-qa-db-ja.com

MySQLでトリガーを無効にする方法は?

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)

[〜#〜] edit [〜#〜]回答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を説明します

18
Grijesh Chauhan

トリガーを一時的に無効にすることはできません。 1つのことを行い、1つのグローバル変数を使用します。トリガーは最初にグローバル変数の値を最初にチェックします。この場合、グローバル変数の値を変更して、トリガーが機能しないようにすることができます。

5
Fathah Rehman P