728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 SQL를 보고 학습한 자료를 남깁니다.

 

트리거란

자동으로 실행되는 것.

INSERT, UPDATE 및 DELETE 시 발생

데이터의 삭제를 방지

예를 들어, 블랙핑크를 삭제하기 전에 다른 곳에 저장을 하고 지우는 것이다.

그런데 업무적으로는 실수할 수도 있다.

이럴 때 트리거를 사용하면 된다.

테이블에 부착하는 것이다.

트리거 실습

CREATE TRIGGER 명령어를 통해서 트리거를 생성할 수 있다.

AFTER DELETE 명령어를 통해서 삭제후 작동하도록 지정할 수 있다.

ON 명령어를 통해서 트리거를 부착한 테이블을 만든다.

FOR EACH ROW 명령어를 통해서 각 행마다 적용시킨다.

BEGIN과 END 절 안에 트리거 실행시 작동되는 코도들을 살펴본다.

DELETE TRIGGER 생성을 완료하였다.

그리고 INSERT를 수행하면 트리거가 작동하지 않은 것을 볼 수 있다.

DELETE TRIGGER이기 때문이다.

자 이번에는 UPDATE를 해보겠다.

트리거가 작동하지 않은 것을 볼 수 있다.

이번에는 DELETE를 수행했다.

성공적으로 가수 그룹이 삭제된 것을 볼 수 있다.

트리거 활용

계좌 테이블을 예로 들자면,

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

백업 테이블을 통한 트리거 예시

OLD 테이블은 조금 특별한 테이블이다.

시스템에서 갖고 있으며 

예를 들어, UPDATE 트리거가 작동 시 UPDATE 이전의 정보가 잠깐 들어간다고 보면 된다.

OLD 테이블에 잠깐 들어간 이전 데이터를 백업 테이블에 INSERT하는 구문이다.

CURRENT_USER() 함수를 통해서 현재 접속한 사용자의 이름을 조회한다. 현재는 root이다.

이번에는 DELETE TRIGGER를 생성하였다.

똑같이 MOD만 변경하여서 백업 테이블에 저장하는 예제이다.

UPDATE와 DELETE를 수행하였다.

백업 테이블에 잘 저장된 것을 볼 수 있다.

백업 테이블에 트리거가 잘 작동하였다는 것을 보여주는 예제이다.

보시면 modDate에 반영일 그리고 modUser에 현재 접속한 사용자를 조회하고

모든 데이터를 백업 데이블에 저장함으로써 보안성을 보장하고

데이터의 무결성에 한층 더 다가설 수 있다.

TRUNCATE TABLE 명령어를 통해서 singer 테이블의 데이터를 전부 삭제하였다.

SELECT를 해보니 결과가 조회되지 않는다.

성공적으로 TRUNCATE 구문을 완료한 것을 볼 수 있다.

backup_singer 테이블을 통해서 백업한 데이터를 확인이 가능하다.

singer테이블의 데이터를 그대로 보유하고 있는 것을 볼 수 있다.

 

감사합니다.

https://www.youtube.com/watch?v=bggWVsBmKag&list=PLVsNizTWUw7GCfy5RH27cQL5MeKYnl8Pm&index=21

 

728x90
반응형
LIST

+ Recent posts