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

2023.07.19 23:15

졸리운_곰 조회 수:1659

[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 96406
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 87143
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 103971
153 [Oracle,오라클] 두row을 user_id (무결성설정) 가지고 있어, 두 row의 값 전부를 user_id 기준으로 swap 하는 sql 코드를 작성 졸리운_곰 2026.10.18 12
152 [Oracle] [Oracle] Update Select 방법 및 bypass_ujvc 졸리운_곰 2026.09.16 147
151 [oracle] Pro*C 사용 방법 안내 (Ver 0.9) 이 문서는 오라클의 Pro*C/C++ Precompiler Programmer's Guide.pdf 문서의 일부분을. 정리한 것입니다. file 졸리운_곰 2023.09.08 1614
150 [oracle] [pro-c] pro*C (프로씨) 프로그래밍 졸리운_곰 2023.09.08 2914
149 [oracle] [pro-c] Pro*C 프로그램 개요 졸리운_곰 2023.09.08 1129
148 [oracle] [Pro*C] Pro*C 소개와 기본 특징 및 오류 진단 졸리운_곰 2023.09.08 1331
147 [oracle] [PRO*C] 거의 모든 예제가 다 있다. 졸리운_곰 2023.09.08 1004
146 [오라클] 오라클 연동 오류 [ORA-01017: invalid username/password; logon denied] 졸리운_곰 2022.11.28 1589
145 [오라클] 제약조건 확인 (FK 찾기) 졸리운_곰 2022.11.28 2052
144 [SQL 데이터분석 학습][오라클][Oracle] 도커로 Oracle 간단 설치하기 file 졸리운_곰 2022.02.06 864
143 [오라클][Oracle] ORA-00904: 부적합한 식별자 졸리운_곰 2021.10.13 1228
142 [오라클][Oracle] 대소문자 구분 없이 검색하는 경우에 WHERE 조건 file 졸리운_곰 2021.10.13 2022
141 [오라클, Oracle] 오라클 비밀번호 만료(Oracle password has expired) file 졸리운_곰 2021.10.10 1420
140 [Oracle] rollup 쿼리 , 오라클 부분합 구하기 file 졸리운_곰 2021.09.01 2017
139 [Oracle, 오라클 dbms] [ORACLE] 오라클 테이블 & 컬럼 조회 하는 방법 졸리운_곰 2021.05.17 1676
138 [Oracle, 오라클 데이터베이스] java.sql.SQLException: ORA-00911: 문자가 부적합합니다. file 졸리운_곰 2021.02.19 1155
137 [oracle, 오라클] 오라클 MERGE INTO 문으로 있으면 UPDATE 없으면 INSERT 한번에 수행하기 졸리운_곰 2021.02.16 1080
136 java.sql.SQLException: 부적합한 열 인덱스 졸리운_곰 2021.01.25 1524
135 [oracle] 오라클 merge into 간단설명 및 예제(sample) 졸리운_곰 2020.12.14 1399
134 [oracle, sql] 04 | MERGE문 졸리운_곰 2020.12.14 1420
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED