트리거(Trigger)는 테이블에서 어떤 이벤트가 발생했을 때 자동으로 실행되는 함수와 같은 존재다.
자바스크립트의 이벤트 리스너처럼 어떤 테이블에서 특정한 이벤트가 발생했을 때 실행시키고자 하는 추가 쿼리 작업들을 자동으로 수행할 수 있게끔 트리거를 미리 설정해주는 것이다.
A 테이블에 1이라는 숫자가 입력됐을 때, 자동으로 B 테이블에도 1을 복사해주고 싶을 때 트리거를 이용해 설정해 놓았다면 자동으로 B에도 1이라는 숫자가 입력되게 할 수 있다
트리거 이벤트 | OLD | NEW |
---|---|---|
INSERT | X | O |
UPDATE | O | O |
DELETE | O | X |
- INSERT - 새롭게 데이터가 추가되는 것이므로 이전 데이터는 존재하지 않아 OLD X, NEW O 입니다.
- UPDATE - 기존에 있던 데이터를 새로운 데이터로 변경하는 작업이기 때문에 OLD O, NEW O 입니다.
- DELETE - 기존에 있던 데이터를 지우는 작업이므로 OLD O, NEW X 입니다.
DELIMITER $$
CREATE TRIGGER before_to_after -- before_to_after라는 Trigger 이름
AFTER INSERT ON before_num -- {BEFORE | AFTER} {INSERT | UPDATE | DELETE}중 언제 어떤 작업을 할 지 정해줍니다.
FOR EACH ROW -- 아래 나올 조건에 해당하는 모든 row에 적용한다는 의미
BEGIN
-- Trigger가 실행되는 코드
IF NEW.number THEN -- 새로운 number가 입력됐을 때,
INSERT INTO after_num(id, number) VALUES(NEW.id, NEW.number); -- `VALUES(NEW.id, NEW.number)`의 데이터를 after_num의 id, number에 삽입
END IF;
END $$
$$
를 많이 씀)Trigger before_to_after는 AFTER INSERT ON before_num
가 실행되면 자동으로 트리거가 작동하는 구조이기 때문에, before_num 테이블에 새로운 데이터를 삽입해주면 됩니다.
INSERT INTO before_num(number) VALUES(1);
SHOW triggers;
-- 전부 삭제
DELETE TRIGGERS;
-- 하나만 삭제
DROP TRIGGET 트리거이름;
DECLARE
명령을 이용해 사용-- DECLARE 선언 방법
BEGIN
DECLARE 변수 타입 {디폴트값}
.
.
.
END
IF (조건) THEN
ELSEIF (조건) THEN
ELSE
ENDIF