MariaDB TRIGGER

이승훈·2024년 11월 18일

트리거는 데이터베이스에서 테이블에 대한 특정 이벤트(예: 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 를 설정할 수 없습니다. 그러므로 콘솔로 데이터베이스에 접속해서 직접 쿼리를 입력해야 합니다.

profile
안녕하세요!

0개의 댓글