programing

MySQL에서 트리거를 비활성화하는 방법?

stoneblock 2023. 9. 6. 21:44

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 Answer MySQL에 내장된 서버 시스템 변수 TRIGER_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은 여기에 설명되어 있습니다.

트리거를 일시적으로 비활성화할 수 없습니다.하나의 글로벌 변수를 사용합니다.트리거는 먼저 전역 변수 값을 확인합니다.이 경우 글로벌 변수 값을 변경하여 트리거가 작동하지 않도록 할 수 있습니다.

@Fathah의 대답은 저에게 약간 다른 해결책(저에게 더 편리한/유연한)을 가리켰습니다.

  1. 비활성화할 트리거 이름을 저장하는 테이블을 만듭니다.
  2. 그런 다음 해당 테이블에 트리거 이름을 입력하여 비활성화합니다.
  3. 작업을 수행하기 전에 해당 테이블의 이름을 트리거로 확인해야 합니다.

예를 들어,

  1. create table Disabled_Triggers (TriggerName varchar(500) not null);

  2. Insert into Disabled_Triggers(TriggerName) values ('trg_example');

CREATE TRIGGER trg_example AFTER UPDATE on Example_Table
     FOR EACH ROW BEGIN
      if not exists (select 1 from Disabled_Triggers where TriggerName = 'trg_example') THEN
       ...
      END IF;
     END;

이제 트리거 이름이 Disabled_에 있을 때트리거 테이블 예제_Table이 업데이트될 때 트리거가 아무 작업도 수행하지 않습니다.이것으로 제 문제가 해결되어 여기에 오게 되었습니다.

언급URL : https://stackoverflow.com/questions/13598155/how-to-disable-triggers-in-mysql