본문 바로가기
디비연동 MySQL &그누보드 & Node.js

데이터 활용해보기 - 트리거

by db_dpipe 2020. 9. 26.
728x90
반응형

오늘은 트리거에 대하여 알아봅니다~

책에서는 다음과 같이 설명하고 있습니다.

"트리거(Trigger)란 테이블에 부착되어 테이블에 INSERT나 UPDATE 또는 DELETE 작업이 발생되면 실행되는 코드를 말한다"

 

이번에는 위키백과를 살펴봅니다.

"데이터베이스 트리거(Database Trigger)는 테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미한다. 트리거는 데이터 조작 언어(DML)의 데이터 상태의 관리를 자동화하는데 사용된다. 트리거를 사용하여 데이터 작업 제한, 작업 기록, 변경 작업 감사 등을 할 수 있다."

https://ko.wikipedia.org/wiki/데이터베이스_트리거

 

이제 대략 감이 오기 시작합니다. 

저는 트리거 하면 이게 생각납니다.

trigger - 방아쇠

대략 이런 방아쇠게 생각납니다. 

 

책에서는 트리거의 예시로 다음을 설명합니다.

예를 들어 회원이 탈퇴하면 이미 탈퇴한 회원은 데이터베이스에 존재하지 않게 됩니다.

그래서 회원이 탈퇴하게 되면 그 해당 데이터를 삭제하기 전에 해당 내용을 다른 곳에 복사를 한다고 가정을 해봅니다.

매번 그와 같은 일을 수작업으로 진행하게 되면... 우리는 실수로 까먹을 때도 있을 것입니다.

그래서 삭제 작업이 일어나기 전에 미리 삭제될 데이터를 자동으로 저장해주는 기능, 이러한 것이 대표적인 트리거의 용도입니다.

문득.. 회원 탈퇴를 해도.. 정보가 남게 할수 있나? 이런 생각이 듭니다. 이건 나중에 다시 찾아보는 걸로...

 

이제 가장 일반적으로 사용되는 트리거의 용도를 실습해봅니다. 


다음의 쿼리문을 통하여 멤버를 추가해줍니다.

insert into memberTBL values ('figure', '연아', '서울시 청담동');

 


다음의 쿼리문을 통해 멤버가 제대로 추가되었는지 확인합니다.

select * from memberTBL;

 


이번에는 주소 데이터를 변경해봅니다.update memberTBL set memberAddress = '서울시 강남구';

 


다음의 쿼리를 통해 주소가 잘 수정되었는지 확인합니다.

select * from memberTBL;

 


그리고 해당 데이터도 삭제해보고, 다시 쿼리문을 통해 삭제가 제대로 되었는지 확인합니다.

delete from memberTBL where memberName = '연아';

select * from memberTBL;

 

 


이제 이렇게 삭제된 데이터는 조회가 불가능합니다. 회원이 자신이 회원이였던 기간을 조회하고자 해도 데이터가 없어서 불가능한 일이 됩니다. 이러한 일을 방지하기 위해 데이터를 삭제하기 전에 다른 테이블에 지정된 데이터와 지워진 날짜를 기록하도록 해봅니다. 

다음의 쿼리문을 통해 지우는 데이터에 관련된 테이블을 생성합니다.

create table deleteMemberTBL (

    memberID char(8), memberName char(5), memberAddredd char(20), deleteDate date

);

 

 


다음의 쿼리문을 통해 회원 테이블에 delete 작업이 일어나면 백업 테이블에 지워진 데이터가 기록되는 트리거를 생성합니다. 

delimiter //

create trigger trg_deleteMemberTBL

    after delete

    on memberTBL

    for each row

    begin

        insert into deleteMemberTBL values(old.memberID, old.memberName, old.memberAddress, curdate());

    end //

delimiter ;

 


이제 기존의 테이블 정보를 한번 확인합니다.

이제 회원 데이터를 삭제하고 삭제된 데이터가 백업 테이블에 들어가는지 확인해봅니다.

먼저 다음의 쿼리문을 통해 회원 테이블의 데이터를 확인해봅니다.

select * from membertbl;

 

 


이제 회원 데이터 하나를 삭제해봅니다.

delete from memberTBL where memberName = '헤롱이';

 

 


Output 창에 실행결과가 잘 보입니다. 하지만 직접 확인해보도록 합니다. 

다음의 쿼리문을 통해 데이터를 확인해봅니다. 회원 정보가 잘 지워졌습니다.

select * from memberTBL;

 

 


이제 백업 테이블을 확인해보도록 합니다.

오~ 지워진 데이터가 여기에 떡~ 하니 자리잡고 있습니다. 와우~ 삭제된 날짜도 확인합니다.

select * from deletemembertbl;

 


 

여기까지 해서 트리거의 개념과 용법을 간단히 살펴보았습니다.~~~

와우~ 여기까지 해보니.. 조금씩 디비 울렁증이 사라진것 같습니다.

오늘로 18일이네요^^ 

100일 다 채우면.. 뭔가 디비로 조물락 거릴수 있을듯 합니다~~

728x90
반응형