MySQL 트리거(trigger).

MySQL 2017. 12. 28. 12:11
반응형

트리거란(trigger)?

트리거(trigger)는 테이블에 대해 어떠한 처리를 실행하면 이에 반응하여 설정해 둔 명령이 자동으로 실행되는 구조를 말합니다. 이때, 이러한 과정이 총의 방아쇠를 당기는 것과 같다 하여 트리거(방아쇠)라고 합니다.

Insert update, delete등의 명령이 실행될 때, 사전에 트리거로 설정해 놓은 기능도 함께 실행할 수가 있습니다. 예를 들어, 테이블의 레코드를 변경하면 그것을 계기로 변경한 내용을 다른 테이블에 기록하도록 트리거를 작성할 수 있습니다.

 

예제로 테이블에 있는 레코드를 삭제하면, 삭제한 레코드가 다른 테이블에 복사되는 트리거를 만들어 보겠습다.

테이블 컬럼 구조만 복사해서 table_trigger 테이블을 만들어 둡니다.

 

select * from table_03;

create table table_trigger like table_03;

select * from table_trigger;

 

트리거 만들기.

트리거는 insert, update, delete등의 명령이 실행되기 직전이나 직후에 호출되어 실행됩니다.

또한 테이블에서 어떠한 처리를 하기 직전과 직후의 값은 다음과 같이 old.컬럼명 과 new.컬럼명으로 얻을 수 있습니다.

다음은 크리거를 만드는 명령문입니다.

create trigger 트리거명 before(또는 after) delete 등의 명령

on 테이블명 for each row

begin

           변경전(old.컬럼명) 또는 변경후(new.컬럼명)을 이용한 처리

end

 

트리거의 본체를 작성할 때 각 명령의 끝에는 세미콜론을 입력합니다. 따라서 미리 구분 문자를 //로 변경해 둡니다.

테이블 table_03의 레코드를 삭제하고, 삭제한 레코드를 테이블 table_trigger에 삽입하는 트리거 trigger_01을 작성해서 테이블 table_03에 있는 모든 레코드를 삭제해 보겠습니다.

delimiter //

create trigger trigger_01

before delete on table_03 for each row

begin

insert into table_trigger values(old.number, old.name, old.age);

end

//

delimiter ;

트리거가 생성되었습니다.

이제 테이블 table_03에 레코드를 모두 삭제하여 table_trigger에 삭제된 레코드가 저절로 입력되는지 확인해 보겠습니다.

 

delete from table_03;

select * from table_03;

select * from table_trigger;

table_03에는 레코드가 남아 있지 않고 table_trigger에는 삭제된 모든 레코드가 추가되어 있어 트리거가 잘 동작한 것을 확인할 수 있습니다.

 

설정한 트리거 확인하기.

현재 설정된 트리거를 확인할 때에는 다음 명령어를 사용합니다.

show triggers;

트리거 삭제하기.

트리거를 삭제할때는 다음 명령어를 사용합니다.

drop trigger 트리거명;

 

drop trigger trigger_01;

show triggers;

 

반응형

'MySQL' 카테고리의 다른 글

MySQL 트랜잭션.  (0) 2018.01.02
MySQL 저장엔진.  (0) 2017.12.29
MySQL 저장함수.  (0) 2017.12.27
MySQL 저장 프로시저 활용하기.  (0) 2017.12.18
MySQL 뷰 이용하기.  (0) 2017.12.13
Posted by 컴스터
,