트리거

는는·2023년 2월 22일
0

SQL - 공부

목록 보기
9/13

트리거란?

자동으로 수행하여 사용자가 추가 작업을 잊어버리는 실수를 방지해줍니다.
예를 들어 회사원이 퇴사하면 직원 테이블에서 삭제하면 됩니다. 그런데 나중에 퇴사한 직원이 회사에 다녔던 기록을 요청할 수도 있습니다. 이를 미리 예방하기 위해 트리거를 사용합니다.

트리거는 직원 테이블에서 사원을 삭제하면 해당 데이터를 자동으로 퇴사자 테이블에 들어가도록 설정 할 수 있습니다. 데이터에 오류가 발생하는 것을 막을 수 있고,이런 것을 데이터의 무결성이라고 부르기도 합니다.

INSERT, UPDATE, DELETE가 실행되면 방아쇠가 당겨져서 트리거를 자동으로 작동합니다.
데이터가 삭제 될 때 해당 데이터를 다른 곳에 자동으로 백업할 수 있습니다.

트리거는 테이블에서 DML문 의 이벤트가 발생할 때 작동 됩니다. 테이블에 미리 부착되는 프로그램 코드라고 생각하면 됩니다.

트리거는 스토어드 프로시저와 문법이 비슷하지만, CALL 문으로 직접 실행시킬 수는 없고 오직 테이블에서 DML문의 이벤트가 발생할 경우에만 자동으로 실행됩니다.

  • DML -> INSERT, UPDATE, DELETE 등...

트리거의 활용

트리거는 테이블에 입력 수정 삭제되는 정보를 백업하는 용도로 활용할 수 있습니다.

다음과 같은 사례를 생각해보겠습니다. 계좌라는 중요한 정보를 누가 입력/수정/삭제했는지 알 수 없다면 나중에 계좌에 문제가 발생했을 때 원인을 파악할 수 없을 것입니다. 이럴때를 대비해서 데이터에 입력 수정 삭제가 발생했을때, 트리거를 자동으로 작동시켜 데이터를 변경한 사용자와 시간 등을 기록할 수 있습니다.

backup_the_glory 라는 백업 테이블을 만들고, 변경과 삭제가 발생할때 작동하는 트리거를 the_glory 테이블에 부착하겠습니다.

변경이 발생했을때 작동하는 트리거를 만들기

OLD 테이블은 UPDATE나 DELETE가 수행될 때, 변경되기 전의 데이터가 잠깐 저장되는 임시 테이블입니다.
OLD 테이블에 UPDATE 문이 작동되면 이 행에 의해서 업데이트되기 전의
데이터가 백업 테이블에 입력됩니다.

  • CURDATE() -> 현재 날짜, CURRENT_USER() -> 현재 작업 중인 사용자

삭제가 발생했을 때 작동하는 트리거 만들기

삭제 작동 트리거는 변경 타입을 삭제로 입력한 것 뿐,변경 발생 트리거와 비슷합니다.

이제 데이터를 변경해보겠습니다.한 건의 데이터를 업데이트하고, 여러건을 삭제 해보겠습니다.

UPDATE the_glory SET seller = '수지' WHERE sell_id = '2000pick';
DELETE FROM the_glory WHERE price >= 10000;
SELECT * FROM backup_the_glory;

DELETE 대신에 TRUNCATE TABLE문으로 삭제해 보겠습니다.

TRUNCATE 문은 DELETE 트리거를 작동시키지 않습니다.

TRUNCATE TABLE the_glory;
SELECT * FROM backup_the_glory;

  • 출처 혼자공부하는 SQL

0개의 댓글