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

2023.07.19 23:15

졸리운_곰 조회 수:1660

[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 96409
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 87143
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 103971
42 [ms sql server] SQL Server 2019 Express 외부 접속을 위한 처리 file 졸리운_곰 2024.07.27 1705
41 [ms sql server] MS-SQL 2019 Express 와 SSMS 를 설치하고 DB, 사용자 추가 후 네트워크 설정하기 file 졸리운_곰 2024.07.27 1617
40 데이터 입력/수정/삭제를 한 번에 처리할 수 있는 MERGE에 대해 알아보자 file 졸리운_곰 2020.09.10 1960
39 SQL Server PIVOT : ms sql server Row Column Pivot 로우 컬럼변환 file 졸리운_곰 2020.06.13 1807
38 MSSQL 로우를 컬럼으로 졸리운_곰 2020.06.13 1888
37 [MS SQL] FROM - PIVOT 및 UNPIVOT 사용 졸리운_곰 2020.06.13 1237
36 [MSSQL] 3개 이상 테이블 조인 file 졸리운_곰 2020.05.16 1738
35 [MSSQL] 경고: 집계 또는 다른 SET 연산에 의해 Null 값이 제거되었습니다. 졸리운_곰 2020.01.31 1832
34 [MSSQL] 경고: 집계 또는 다른 SET 작업에 의해 Null 값이 제거되었습니다. file 졸리운_곰 2020.01.31 2108
33 MS-SQL 트리거 사용하기 (간략 공략!?!?) file 졸리운_곰 2020.01.31 1765
32 [ms sql server] T-SQL 저장 프로시져 만들기 : CREATE PROCEDURE(Transact-SQL) file 졸리운_곰 2020.01.27 1982
31 [ms sql server] 저장 프로시저 만들기 file 졸리운_곰 2020.01.27 1282
30 Installing Microsoft SQL Server in Docker SQL Server and Docker file 졸리운_곰 2020.01.26 9297
29 MS SQL Stored Procedure file 졸리운_곰 2020.01.26 1780
28 [MSSQL] 저장 프로시저 만들기 실습 file 졸리운_곰 2020.01.26 1886
27 MS-SQL 에서 한글 검색이 안되는 경우 졸리운_곰 2020.01.24 1612
26 mssql 2012 언어변경 질문드립니다. file 졸리운_곰 2020.01.23 1694
25 [MS-SQL] 쿼리문 정리 file 졸리운_곰 2020.01.23 2222
24 [DB/Docker/MSSQL] Docker + MSSQL 개발하기 졸리운_곰 2020.01.23 1585
23 Linux에서 환경 변수를 사용하여 SQL Server 설정 구성 file 졸리운_곰 2020.01.23 1487
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED