SNOWFLAKES DRAWING PAPER
[SQL] MySQL Trigger 본문
MySQL Trigger
Trigger란?
테이블에 미리 지정한 어떤 이벤트가 발생할 때 활동하도록한 테이블과
연관된 데이터베이스에서 이름붙인 하나의 객체를 의미하는 것으로
트리거 역시 임의의 테이블에 대해 SQL 문장이 실행될 때
임의의 조건을 만족하는 경우 해당되는 명령을 처리하는 방식으로 사용된다.
(MySQL은 5.0.x 이상부터 Trigger 를 지원)
--------------------------------------------------------------------------------------
TRIGGER의 종류
트리거는 SQL문이 언제 실행되느냐에 따라 또는 트리거하는 SQL 문장에 의해
영향받는 각 row에 대해 트리거가 실행되느냐 아니냐에 따라 다음과 같이 분류된다.
SQL문의 실행시기에 따른 분류 | BEFORE 트리거 | SQL 문장이 실행되기 전 트리거가 먼자 실행됨 |
AFTER 트리거 | SQL 문장이 실행딘 다음 트리거가 실행됨 | |
SQL문에 의해 영향받는 각 row에 따른 분류 |
ROW 트리거 | SQL 문장의 각 row에 대해 한번씩 실행 |
STATEMENT 트리거 | SQL 문장에 대해 한번만 실행 | |
실행 시점과 범위를 조합하여 트리거는 다음 4가지로 분류한다.
실행시점 | 실행범위 | 내용 |
---|---|---|
BEFORE | STATEMENT | SQL 문이 실행되기 전에 그 문장에 대해 한번 실행 |
BEFORE | ROW | DML 작업하기 전에 각 ROW에 대해 한번씩 실행 |
AFTER | STATEMENT | SQL 문이 실행된 후 그 문장에 대해 한번 실행 |
AFTER | ROW | DML 작업한 후 각 ROW에 대해 한번씩 실행 |
--------------------------------------------------------------------------
TRIGGER의 생성
트리거는 다음과 같은 방법으로 생성한다
【형식】
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name
FOR EACH ROW trigger_stmt;
ROW 트리거에서 컬럼의 실제 데이터값을 제어하는데 사용하는 연산자는
:OLD와 :NEW이다.
이 연산자와 함께 컬럼명을 함께 기술한다.
예를 들어, 컬럼명이 sal이라고 하면,
변경전의 값은 :OLD.sal이고 변경 후의 값은 :NEW.sal처럼 표기한다.
--------------------------------------------------------------------------
TRIGGER의 삭제
【형식】
DROP TRIGGER [schema_name.]trigger_name;
위와 같은 문을 사용하여 트리거를 삭제할 수 있다.
--------------------------------------------------------------------------
[출처: http://radiocom.kunsan.ac.kr/lecture/mysql/trigger.html]
트리거를 사용하는 경우 자동화된 입력이 가능해진다. 먼저 delimiter | 사용하여 트리거 정의가 끝나기 전까지 문장이 종료되지 않도록 종료자를 변경한다. 정의이 끝나면 원래의 ; 으로 복구한다.
CREATE TRIGGER trg_trade BEFORE INSERT ON trade
FOR EACH ROW BEGIN
IF NEW.`교환대상_1` THEN
insert INTO money value( NEW.userB_id , NEW.`교환대상_1` , NEW.`교환값_1` , 1 )
on duplicate key update
userA_id = NEW.userB_id ,
userB_id = NEW.`교환대상_1` ,
`보유액` = `보유액` + NEW.`교환값_1` ,
`거래횟수` = `거래횟수` + 1 ;
END IF ;
END;
|
delimiter ;
on duplicate key 는 이미 중복키가 있을 경우를 대비한 insert 문이라 할 수 있다.
http://www.arraystudio.com/as-workshop/mysql-insert-a-new-row-or-update-old-one.html
'개발 > Oracle/SQL/ERD' 카테고리의 다른 글
[SQL] Mysql - ErrCode (0) | 2009.04.18 |
---|---|
[SQL] MYSQL :: cursor & insert error check example (0) | 2009.04.18 |
[SQL] mysqldump (0) | 2009.04.18 |
[SQL] MYSQL :: show table status (0) | 2009.04.18 |
[SQL] MySql 데이터 타입 (0) | 2009.04.18 |