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

2023.07.19 23:15

졸리운_곰 조회 수:1501

[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 87003
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 79256
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95995
13 [데이터 수집 및 전처리] 주식 전종목 어떻게 불러올까? 거래소 종목 불러오기 file 졸리운_곰 2023.12.09 1704
12 [데이터 수집 및 전처리] [Python/파이썬]네이버증권API 활용 - 회사명, 종목코드 받아오기 file 졸리운_곰 2023.12.08 1510
11 [데이터 수집 및 전처리] 네이버 금융(차트)에서 주가 갈무리(크롤링)하기 file 졸리운_곰 2023.12.08 1497
10 [데이터 수집 및 전처리] 네이버 증권에서 일봉, 주봉 데이터 가져오기 file 졸리운_곰 2023.12.08 1505
9 [데이터 수집 및 전처리] (놀라운) 한글 데이터 짱! AwesomeKorean_Data file 졸리운_곰 2023.03.07 1200
8 [데이터 수집 및 전처리] Crawling, Scraping file 졸리운_곰 2022.05.21 1477
7 [데이터분석][데이터수집 전처리] MS 엑셀(Excel)에서 UTF-8 로 된 csv 파일 가져오기 file 졸리운_곰 2021.09.30 1417
6 카프카 설치 시 가장 중요한 설정 4가지 졸리운_곰 2021.07.13 1932
5 Prometheus Query(PromQL) 기본 이해하기 file 졸리운_곰 2020.12.17 1416
4 [인프라 모니터링 오픈소스] Prometheus 를 알아보자 file 졸리운_곰 2020.12.17 1913
3 Prometheus + Grafana 대시보드 file 졸리운_곰 2020.12.17 2494
2 Grafana란? file 졸리운_곰 2020.12.17 2166
1 Importing wikipedia dump to MySql 졸리운_곰 2020.10.04 2500
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED