MySQL [MySQL] 트리거(Trigger)의 활용

2023.07.19 23:15

졸리운_곰 조회 수:1630

[MySQL] 트리거(Trigger)의 활용

트리거(Trigger)란 특정 조건이 만족하면 저절로 실행되는 일종의 장치라고 볼 수 있다. 이녀석은 프로시저(Procedure)나 펑션(function)과 다르게 한번 설정을 하면 동작을 항상 감시하고 있다가 조건에 해당하는 동작이 수행되는 순간 실행되는 특징을 가지고 있다.

​

기본 구조

DELIMITER $$ CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE| DELETE } ON table_name FOR EACH ROW BEGIN -- 트리거 내용 END DELIMITER ;

종류

​

행 트리거: 테이블의 행 각각 실행된다.

문장 트리거: INSERT, DELETE, UPDATE 문에 대해서 한번만 실행된다.

​

이벤트 속성

트리거 작동 시점

- Atfer : 이벤트(조건 명령문) 발생 이후 트리거 실행

- before: 이벤트(조건 명령문) 발생 이전 트리거 실행

​

이벤트(조건 명령문)

Delete: 삭제 했을 때 트리거 실행

Insert : 삽입 했을 때 트리거 실행

Update : 삭제 했을 때 트리거 실행

​

ex)

before delete on A

A 테이블에서 데이터가 삭제 되기 전에 트리거 실행

​

after delete on B

B 테이블에서 데이터가 삭제 된 이후에 트리거 실행

​

before insert on C

C 테이블에서 데이터가 삽입 전에 트리거 실행

​

......

키워드

 

​

old

예전 데이터 즉,

delete 로 삭제 된 데이터 또는

update 로 바뀌기 전의 데이터

​

new

새 데이터 즉,

insert 로 삽입된 데이터 또는

update 로 바뀐 후의 데이터

​

표로 정리하면 다음과 같다.

이벤트

old

new

delete

O

X

insert

X

O

update

O

O

사용 가능: O

사용 불가능: X

예제

이제 트리거에 대한 개념과 속성을 이해했으니 실전으로 가보자

​

예제로 만들 트리거는 채팅 내용을 삭제 시, 해당 내용을 백업 테이블에 자동으로 백업하는 트리거를 만들 것이다.

​

​

테이블(table)

CREATE TABLE chat( id VARCHAR(32), answer VARCHAR(32) NOT NULL ); CREATE TABLE chatBackup( idBackup VARCHAR(32), answerBackup VARCHAR(32) NOT NULL );

chat 과 chatBackup 두개의 테이블이 있고

INSERT INTO chat VALUE ('pigg', '안녕'); INSERT INTO chat VALUE ('lemon', '반가워'); INSERT INTO chat VALUE ('pigg', '오늘 날씨 어때?'); INSERT INTO chat VALUE ('lemon', '날씨 좋아');

chat 테이블에만 4개의 데이터를 넣었다.

chat table

chatBackup table

​

트리거(Trigger)

DELIMITER $$ CREATE TRIGGER autoBackup BEFORE DELETE ON chat FOR EACH ROW BEGIN DECLARE idTemp VARCHAR(32); DECLARE answerTemp VARCHAR(32); SET idTemp = OLD.id; SET answerTemp = OLD.answer; INSERT INTO chatBackup VALUE (idTemp, answerTemp); END $$ DELIMITER ;

트리거를 다 작성하고

SHOW TRIGGERS;

를 통해서 정상적으로 만들어졌는지 확인할 수 있다.

SHOW TRIGGERS;

트리거가 정상적으로 만들어졌으니 테스트를 해보자.

​

트리거의 발동 조건은 chat 테이블의 테이터를 삭제했을 경우다.

(BEFORE DELETE ON chat)

DELETE FROM chat WHERE id='pigg';

pigg 의 모든 데이터(채팅)을 삭제하도록 하겠다.

​

SELECT * FROM chat;

chat table

chat 테이블에서는 정상적으로 삭제했다.

​

이제 트리거 결과를 확인해보자.

​

트리거 결과

​

트리거로 건들었던 chatBackup 테이블을 확이해보면 트리거가 정상적으로 작동되었는지 확인할 수 있다.

SELECT * FROM chatbackup;

chatbackup

​

chat 테이블에서 삭제했던 데이터가 트리거로 인해서 chatBackup 테이블에 자동으로 백업된 것을 확인할 수 있다.

​

트리거 활용하기

이렇게 트리거는 임시 저장, 데이터 복구, 채팅 로그 등 다양한 곳에 활용이 가능하다!

예를 계정을 해킹 당해서 아이템을 털리는 경우가 있다. 트리거를 활용하여 해당 아이템의 이동 경로를 기록해 놓는다면 해킹으로 인해 잃은 아이템을 복구할 수 있다.

 

[출처] https://m.blog.naver.com/alcmskfl17/221859839012

 

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

[MySQL] 트리거(Trigger)의 활용

트리거(Trigger)란 특정 조건이 만족하면 저절로 실행되는 일종의 장치라고 볼 수 있다. 이녀석은 프로시저(Procedure)나 펑션(function)과 다르게 한번 설정을 하면 동작을 항상 감시하고 있다가 조건에 해당하는 동작이 수행되는 순간 실행되는 특징을 가지고 있다.

​

기본 구조

DELIMITER $$ CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE| DELETE } ON table_name FOR EACH ROW BEGIN -- 트리거 내용 END DELIMITER ;

종류

​

행 트리거: 테이블의 행 각각 실행된다.

문장 트리거: INSERT, DELETE, UPDATE 문에 대해서 한번만 실행된다.

​

이벤트 속성

트리거 작동 시점

- Atfer : 이벤트(조건 명령문) 발생 이후 트리거 실행

- before: 이벤트(조건 명령문) 발생 이전 트리거 실행

​

이벤트(조건 명령문)

Delete: 삭제 했을 때 트리거 실행

Insert : 삽입 했을 때 트리거 실행

Update : 삭제 했을 때 트리거 실행

​

ex)

before delete on A

A 테이블에서 데이터가 삭제 되기 전에 트리거 실행

​

after delete on B

B 테이블에서 데이터가 삭제 된 이후에 트리거 실행

​

before insert on C

C 테이블에서 데이터가 삽입 전에 트리거 실행

​

......

키워드

 

​

old

예전 데이터 즉,

delete 로 삭제 된 데이터 또는

update 로 바뀌기 전의 데이터

​

new

새 데이터 즉,

insert 로 삽입된 데이터 또는

update 로 바뀐 후의 데이터

​

표로 정리하면 다음과 같다.

이벤트

old

new

delete

O

X

insert

X

O

update

O

O

사용 가능: O

사용 불가능: X

예제

이제 트리거에 대한 개념과 속성을 이해했으니 실전으로 가보자

​

예제로 만들 트리거는 채팅 내용을 삭제 시, 해당 내용을 백업 테이블에 자동으로 백업하는 트리거를 만들 것이다.

​

​

테이블(table)

CREATE TABLE chat( id VARCHAR(32), answer VARCHAR(32) NOT NULL ); CREATE TABLE chatBackup( idBackup VARCHAR(32), answerBackup VARCHAR(32) NOT NULL );

chat 과 chatBackup 두개의 테이블이 있고

INSERT INTO chat VALUE ('pigg', '안녕'); INSERT INTO chat VALUE ('lemon', '반가워'); INSERT INTO chat VALUE ('pigg', '오늘 날씨 어때?'); INSERT INTO chat VALUE ('lemon', '날씨 좋아');

chat 테이블에만 4개의 데이터를 넣었다.

chat table

chatBackup table

​

트리거(Trigger)

DELIMITER $$ CREATE TRIGGER autoBackup BEFORE DELETE ON chat FOR EACH ROW BEGIN DECLARE idTemp VARCHAR(32); DECLARE answerTemp VARCHAR(32); SET idTemp = OLD.id; SET answerTemp = OLD.answer; INSERT INTO chatBackup VALUE (idTemp, answerTemp); END $$ DELIMITER ;

트리거를 다 작성하고

SHOW TRIGGERS;

를 통해서 정상적으로 만들어졌는지 확인할 수 있다.

SHOW TRIGGERS;

트리거가 정상적으로 만들어졌으니 테스트를 해보자.

​

트리거의 발동 조건은 chat 테이블의 테이터를 삭제했을 경우다.

(BEFORE DELETE ON chat)

DELETE FROM chat WHERE id='pigg';

pigg 의 모든 데이터(채팅)을 삭제하도록 하겠다.

​

SELECT * FROM chat;

chat table

chat 테이블에서는 정상적으로 삭제했다.

​

이제 트리거 결과를 확인해보자.

​

트리거 결과

​

트리거로 건들었던 chatBackup 테이블을 확이해보면 트리거가 정상적으로 작동되었는지 확인할 수 있다.

SELECT * FROM chatbackup;

chatbackup

​

chat 테이블에서 삭제했던 데이터가 트리거로 인해서 chatBackup 테이블에 자동으로 백업된 것을 확인할 수 있다.

​

트리거 활용하기

이렇게 트리거는 임시 저장, 데이터 복구, 채팅 로그 등 다양한 곳에 활용이 가능하다!

예를 계정을 해킹 당해서 아이템을 털리는 경우가 있다. 트리거를 활용하여 해당 아이템의 이동 경로를 기록해 놓는다면 해킹으로 인해 잃은 아이템을 복구할 수 있다.

 

[출처] https://m.blog.naver.com/alcmskfl17/221859839012

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 94811
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 85855
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 102674
1046 [MySQL Workbench] [MYSQL] WORKBENCH로 트리거 설정하기 file 졸리운_곰 2023.08.14 1015
1045 [MySQL] 트리거 (종류, 사용법, 삭제, 예제) 졸리운_곰 2023.07.19 1336
» [MySQL] 트리거(Trigger)의 활용 file 졸리운_곰 2023.07.19 1630
1043 [MySQL] 트리거(Trigger)란? 트리거 사용 예제 file 졸리운_곰 2023.07.19 1464
1042 [AutoML][AutoKeras] [OSS] AutoKeras로 자동학습(AutoML) 하기 file 졸리운_곰 2023.07.02 1654
1041 [NoSQL][MongoDB] Truncate a collection 졸리운_곰 2023.06.04 1311
1040 [Tensorflow 2.0] 모델 저장하고 불러오기 졸리운_곰 2023.05.21 1189
1039 [pytorch] Pytorch에서 학습한 모델 저장 및 불러오기 졸리운_곰 2023.05.21 1882
1038 [MySQL] MySQL - 테이블 만들기 file 졸리운_곰 2023.05.13 1337
1037 [R library] library(XML) # install.packages("XML") 인스톨 에러 졸리운_곰 2023.05.06 1289
1036 [MySQL] MySQL Strict mode 끄기/켜기 졸리운_곰 2023.05.05 1510
1035 [R 데이터 분석] Titanic: Machine Learning from Disaster (타이타닉 생존 예측) file 졸리운_곰 2023.04.29 1375
1034 [R 데이터 분석] R 유명한 패키지 정리 졸리운_곰 2023.04.24 2016
1033 [NoSQL] MongoDB 인증 모드 (password) 설정 졸리운_곰 2023.03.26 1559
1032 [MySQL] [MySQL] 테이블 구조와 데이터 복사 (Table Structure and Data Copy) 졸리운_곰 2023.03.20 1434
1031 [R 데이터 분석] Shiny : 대시보드 배포하기 file 졸리운_곰 2023.03.19 1524
1030 [데이터 수집 및 전처리] (놀라운) 한글 데이터 짱! AwesomeKorean_Data file 졸리운_곰 2023.03.07 1244
1029 [pytorch] Using BERT with Pytorch file 졸리운_곰 2023.03.06 1138
1028 [pytorch] Full NMT model from pretrained BERT file 졸리운_곰 2023.03.06 977
1027 [기계학습][딥러닝] PyTorch Hello World 졸리운_곰 2023.02.12 1348
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED