트리거는 데이터베이스에서 테이블에 대한 특정 이벤트(예: INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 일종의 데이터베이스 코드 블록입니다.
1. 트리거 기본 구조
CREATE TRIGGER 트리거_이름
{ BEFORE | AFTER } { INSERT | UPDATE | DELETE }
ON 테이블_이름
FOR EACH ROW
BEGIN
-- 실행할 SQL 문
END;
1) CREATE TRIGGER 트리거_이름: 트리거 이름을 지정합니다.
2) BEFORE 또는 AFTER: 트리거가 실행될 시점을 지정합니다. BEFORE는 작업 전에 실행되고, AFTER는 작업 후에 실행됩니다.
3) INSERT, UPDATE, DELETE: 트리거가 작동할 이벤트를 선택합니다. 예를 들어, DELETE를 선택하면 삭제될 때 트리거가 실행됩니다.
4) ON 테이블_이름: 트리거가 적용될 테이블을 지정합니다.
5) FOR EACH ROW: 변경된 각 행에 대해 트리거가 실행되도록 설정합니다.
6) BEGIN ... END;: 실행할 SQL 문을 묶어주는 블록입니다. 여러 SQL 문을 넣을 수 있습니다.
2. 트리거 사용 예
DELIMITER //
CREATE TRIGGER after_music_delete
AFTER DELETE ON music
FOR EACH ROW
BEGIN
DELETE FROM file WHERE id = OLD.audio;
DELETE FROM file WHERE id = OLD.scoreVideo;
DELETE FROM file WHERE id = OLD.musicVideo;
END//
DELIMITER ;
1) DELIMITER //: MariaDB에서는 트리거를 작성할 때 DELIMITER를 //로 변경합니다. 이는 트리거 블록 내에서 ;를 자유롭게 사용하기 위해 필요합니다. 트리거 생성이 끝나면 DELIMITER ;로 다시 되돌려야 합니다.
2) AFTER DELETE ON music: music 테이블에서 행이 삭제된 후 실행됩니다.
3) FOR EACH ROW: 삭제되는 각 행에 대해 트리거가 실행됩니다.
4) OLD.audio, OLD.scoreVideo, OLD.musicVideo: 삭제된 행의 이전 값에 접근하기 위해 OLD 키워드를 사용합니다.
5) DELETE FROM file WHERE id = OLD.audio;: audio, scoreVideo, musicVideo 필드가 참조하는 file의 id 값을 기준으로 file에서 해당 행을 삭제합니다.
3. 트리거 관리
1) 트리거 확인
SHOW TRIGGERS;
2) 트리거 삭제
DROP TRIGGER IF EXISTS after_music_delete;
3) 트리거 수정
트리거는 수정이 불가능합니다. 그래서 삭제한 후 다시 생성해야 합니다.
4. 주의 사항
DBeaver 에선 왜인지 DELIMITER 를 설정할 수 없습니다. 그러므로 콘솔로 데이터베이스에 접속해서 직접 쿼리를 입력해야 합니다.