지연된 실행 영역

설명

CUBRID에서는 REPLACE 문과 INSERT … ON DUPLICATE KEY UPDATE 문 실행 시 내부적으로 DELETE, UPDATE, INSERT 작업이 발생하면서 해당 트리거가 실행된다. 다음 표는 REPLACE 혹은 INSERT … ON DUPLICATE KEY UPDATE 문이 수행될 때 발생하는 이벤트에 따라 CUBRID에서 트리거가 어떤 순서로 동작하는지를 나타낸다. REPLACE 문과 INSERT … ON DUPLICATE KEY UPDATE 문 모두 상속받은 클래스(테이블)에서는 트리거가 동작하지 않는다.

REPLACE와 INSERT … ON DUPLICATE KEY UPDATE 문에서 트리거의 동작 순서

이벤트

트리거 동작 순서

REPLACE
레코드가 삭제되고 삽입될 때

BEFORE DELETE >
AFTER DELETE >
BEFORE INSERT >
AFTER INSERT

INSERT … ON DUPLICATE KEY UPDATE
레코드가 업데이트될 때

BEFORE UPDATE >
AFTER UPDATE

REPLACE, INSERT … ON DUPLCATE KEY UPDATE
레코드가 삽입만 될 때

BEFORE INSERT >
AFTER INSERT

예제

다음은 with_trigger 테이블에 INSERT … ON DUPLICATE KEY UPDATERELPACE를 수행하면 트리거가 동작하여 trigger_actions 테이블에 레코드를 삽입하는 예제이다.

CREATE TABLE with_trigger (id INT UNIQUE);

INSERT INTO with_trigger VALUES (11);

 

CREATE TABLE trigger_actions (val INT);

 

CREATE TRIGGER trig_1 BEFORE INSERT ON with_trigger EXECUTE INSERT INTO trigger_actions VALUES (1);

CREATE TRIGGER trig_2 BEFORE UPDATE ON with_trigger EXECUTE INSERT INTO trigger_actions VALUES (2);

CREATE TRIGGER trig_3 BEFORE DELETE ON with_trigger EXECUTE INSERT INTO trigger_actions VALUES (3);

 

INSERT INTO with_trigger VALUES (11) ON DUPLICATE KEY UPDATE id=22;

 

SELECT * FROM trigger_actions;

          va

==============

            2

 

REPLACE INTO with_trigger VALUES (22);

 

SELECT * FROM trigger_actions;

          va

==============

            2

            3

            1