MySQL에서 기존 트리거 정의를 수정할 수 있습니까?


14

MySQL에서 트리거 정의를 업데이트 할 수 있는지 궁금합니다. 예를 들어 트리거 T가 있고 새로운 기능을 추가하고 싶습니다.

내 가정은 그것을 삭제하고 다시 만들어야한다는 것입니다.

이러한 시나리오에 대한 데이터베이스 관리의 모범 사례는 무엇입니까?


Alex, 트리거 정의에 대한 MySQL 문서를 살펴 보셨습니까? 그것은 무엇을 말 했는가? 어떤 부분을 확신하지 못하거나 구현하려고 할 때 문제가 발생합니까?
Michael Green

트리거를 업데이트 할 수 있는지 여부는 MySQL 설명서에서 정보를 찾지 못했습니다. 불가능하다고 가정하고 다시 확인하고 싶습니다.
Alex

답변:


19

원자 정의 작업에서 트리거를 변경할 수 있는지 묻는 것처럼 들립니다. 새 정의에 실패하면 이전 정의를 잃지 않습니다 ...와 유사 CREATE OR REPLACE VIEW하며 새 정의의 경우보기 정의를 대체합니다 유효하지만 교체 할 수없는 경우 기존 것을 그대로 둡니다.

불행히도 없다 ALTER TRIGGER또는 CREATE OR REPLACE TRIGGERMySQL의에.

모범 사례는 트리거가있는 테이블을 잠그는 것이므로 트리거가없는 행에는 영향을 미치지 않습니다. 테이블이 잠겨있는 동안 트리거를 삭제하고 추가 할 수 있습니다.

mysql> LOCK TABLES t1 WRITE; -- the next prompt appears once you've obtained the lock
mysql> DROP TRIGGER t1_bi; 
mysql> DELIMITER $$
mysql> CREATE TRIGGER ti_bi BEFORE INSERT ON t1 FOR EACH ROW 
       BEGIN
       ...
       END $$
mysql> DELIMITER ;
mysql> UNLOCK TABLES;

업데이트 : 버전 10.1.4의 MariaDB CREATE OR REPLACE TRIGGER는 MySQL의 드롭 인 대체에 대한 지원 을 추가 했습니다.

https://mariadb.com/kb/en/mariadb/create-trigger/

5.7의 Oracle MySQL은 여전히 ​​위의 솔루션에 의존합니다.


2
"5.7의 Oracle MySQL은 여전히 ​​위의 솔루션에 의존합니다"-여전히 8.0 버전의 사례
Paul Campbell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.