5-4) MySQL 고급기능(Trigger)

Hyoin Jeong·2022년 7월 15일

Trigger란?

  • INSERT/DELETE/UPDATE 실행 전후에 특정 작업을 자동으로 수행하는 것 → SELECT와 관계X
    • 보통 특정 대상 테이블과 언제(전후)실행할 지 정해야함
  • CREATE TRIGGER 명령을 사용
  • NEW/OLD modifier
    • NEW는 INSERT와 UPDATE에서만 사용가능
    • OLD는 DELETE와 UPDATE에서만 사용가능
CREATE TRIGGER 트리거이름
{BEFORE | AFTER} {INSERT | UPDATE| DELETE }
ON table_name FOR EACH ROW
trigger_body;

[예시]

  • 중요 테이블의 경우 감사(audit)가 필요 → 백업을 하자(변경한 시간)
    • 레코드에 변경이 생길 때마다 변경전의 레코드를 저장하는 트리거를 만들어보자

→ hyoin_name_gender테이블에 UPDATE가 될 때 마다 hyoin_name_gender_audit 테이블에 변경되기전 지금의 이름, 성별, 시간을 INSERT한다(백업과정)

CREATE TABLE test.hyoin_name_gender_audit (
name varchar(16),
gender enum('Male', 'Female'),
modified timestamp
);

-- 트리거 정의
CREATE TRIGGER test.before_update_hyoin_name_gender
	BEFORE UPDATE ON test.hyoin_name_gender --> UPDATE를 하기 전에 이 Trigger를 실행
	FOR EACH ROW
INSERT INTO test.hyoin_name_gender_audit
SET name = OLD.name, --> 변경되는 지금의 값 | 만약 새로 쓰여지는 값을 쓰고 싶으면 NEW
	gender = OLD.gender,
	modified = NOW();
-- 트리거 사용 예
UPDATE test.hyoin_name_gender
SET name = 'hyoin'
WHERE name = 'hyoin2';

SELECT * FROM test.hyoin_name_gender_audit;

0개의 댓글