티스토리 뷰

오늘 포스팅에서는 트리거에 대한 기초를 간단한 예제를 통해 이해하도록 해보겠습니다.

트리거에 대한 깊은 내용은 추후에 다루도록 하겠습니다.

트리거(TRIGGER)
테이블에 대한 이벤트에 반응해 자동으로 실행 되는 작업을 의미한다.

 

조금 더 이해를 돕기 위해, 이야기를 해보도록 하겠습니다.

트리거란 녀석은 테이블에 INSERTUPDATE 또는 DELETE 작업이 발생되면 자동으로 실행되는 코드를 말합니다.

여기서 중요한 점은 자동으로 실행 된다는 것입니다.

 

더 쉬운 이해를 위해 예 를 들어보도록 하겠습니다.

학부사이트라고 가정해보도록 하죠.

학교에는 학생이라는 데이터가 있습니다.

그런데 어떤 학생은 학교가 마음에 들지 않아 그만두게 되는 경우가 생길 겁니다. (너무 극단적인가요 ?ㅎㅎ...)

그렇다면 자연스럽게 학교의 학생테이블에서 삭제가 되는것이 정상일 것입니다.

하지만 어느날 내가 언제부터 언제까지 학교를 다녔는지에 대한 자료가 필요하게 되었고, 이 데이터를 요구하게 되었는데, 학생테이블에서 삭제가 되면서 이에 대한 자료가 없는 경우가 생길 것입니다.

그렇다면 데이터를 삭제하기 전에 그 내용을 다른곳에 먼저 복사해 놓으면 되지만, 매번 이런 작업을 수작업으로 하게 된다면? 데이터의 신뢰성이 떨어지고, 데이터의 구조도 망가지게 되는 경우가 생길 수 있습니다.

이러한 실수를 대비하기 위해 자동으로 삭제 작업이 일어날 경우 삭제 되기 전에 미리 다른 곳에 삭제될 데이터를 자동으로 저장해 주는 기능 이 대표적인 트리거(TRIGGER)의 사용 용도 입니다.

 

대표적인 예로 구글의 비밀번호를 최근 비밀번호 대신 이전의 비밀번호로 쳐보세요 !

몇개월 전에 변경 되었다고 나오는 것 또한 트리거의 사용에 대한 예가 될 수 있죠.

 

백문이 불여일견

그래도 이해가 가지 않으신다면 일단 따라해보면서 이해하도록 해볼게요


실습

오늘 실습에서는 employee 예제 사용 대신 간단한 테이블을 만들면서 진행해 보도록 할게요.

(이를 통해 CREATE 문 과 DELETE, INSERT, 문 등을 자연스럽게 익히기)

테이블 생성부터 시작하기 때문에 본론인 트리거에 대한 실습이 조금 뒤에 나옵니다.

 

 

저는 명령 프롬프트 사용을 하도록 하겠습니다. (workbench 사용 또한 같이 진행)

 

1. 명령 프롬프트로 mysql 접속하기 ( Workbench 실행시키기 )

mysql -u root -p

mysql을 명령프롬프트를 통해 접속하기

2. 데이터 베이스 생성하기 ( 스키마 생성 )

Mysql 에서는 데이터베이스 생성 을 스키마 생성이라고 볼 수 있습니다.

두가지 명령어 사용을 할 수 있는데요. 저는 첫번째를 권장 드립니다. ( 이유는 보편적인 사용이니까 )

create database [데이터베이스명];
create schema [데이터베이스명];

저는 testDB 라는 이름으로 데이터베이스를 생성하도록 하겠습니다.


WorkBench 를 이용하신다면 다음과 같은 작업이 되겠죠? ( 저는 이미 명령프롬프트를 통해 생성이 된모습도 확인)

Workbench 이용시

3. 간단한 회원 테이블 만들기

3.1

testDB 라는 데이터베이스 공간에 작업을 하기위해 ( Workbench 는 testDB스키마 더블클릭)

use testDB;

3.2

ID, 이름, 휴대폰 번호 가 있는 회원 테이블 만들기 

지금은 PK 라던지, AUTO_INCREMENT 는 사용하지 않도록 하겠습니다.

CREATE TABLE `memberTBL` (
`memberID`  VARCHAR(15) NOT NULL,
`memberName`  VARCHAR(15) NOT NULL,
`memberPhone`  VARCHAR(20) NOT NULL);

'홑따옴표(single quote)가 아닌 `(back quote)로 작성해야함

Workbench 를 이용하면 다음과 같이 작업할 수 있습니다. ( Applye 후에 명령어 한번씩 봐주세요 ! )

testDB-table 우클릭 Create table 에서 설정해준다.

4. 회원 내용 추가하기(INSERT)

INSERT INTO 테이블명 VALUES (컬럼값);

5. 회원내용 삭제하기 (DELETE)

DELETE FROM [테이블명] WHERE 조건 ;

*Workbench 사용하시면서 다음과 같은 오류 뜬다면 ( workbench safe update ) 

이럴때는

Edit - Preferences

체크를 푸셔야 합니다.

Safe Updates 체크 해제


트리거 실습을 하기도 전에 내용이 길어졌네요.

그렇지만 우리가 예제를 통해 '이순신' 컬럼을 DELETE 문을 통해 삭제해보았는데요.

다시 SELECT 문을 통해 확인했을 때 어떠한 이순신에 대한 정보도 찾을 수가 없겠죠 ?

본격적으로 이런 상황을 위한(삭제된 회원정보를 찾기위한) 트리거 실습을 해보도록 하겠습니다.

 


 

6. 삭제된 회원정보가 저장될 테이블 만들기

삭제된 회원의 ID, 이름, 휴대폰번호 그리고 추가적으로 삭제된 날짜까지 저장하는 테이블을 생성해보도록 하겠습니다.

7. 트리거(TRIGGER) 만들기

DELIMITER //
CREATE TRIGGER
[트리거명]
AFTER DELETE
    ON
[테이블명]
    FOR EACH ROW
BEGIN
    조건문
END//
DELIMITER ;

다음 예시를 통해 하나씩 파악해보도록 하겠습니다.

DELIMITER // ~ DELIMITER;

어디선가 많이 보던 문장이죠 ?

프로시저를 생성할 때도 다음과 같은 구문을 보셨을겁니다.

구문의 시작과 끝을 파악하기 위해 작성해 주는 부분 입니다.

 

CREATE TRIGGER [트리거명]

삭제될 회원에 대한 트리거다 라고 생각하시면 됩니다.

이름설정 또한 이해하기 쉽게 설정해 주면 좋겠죠?

 

AFTER DELETE

ON memberTBL

FOR EACH ROW

memberTBL 의 회원이 삭제가 진행되면 이벤트를 발생하겠다 라는 구문입니다.

 

BEGIN
INSERT INTO 
deleteMemberTBL VALUES (
OLD.
memberID, OLD.memberName, OLD.memberPhone, CURDATE() );
END//

 

MemberTBL 의 회원정보가 삭제가 되면 deleteMemberTBL 에 데이터를 INSERT 하겠다.

OLD. 은 특수 테이블인데, 삭제될 데이터 즉 memberTBL 에 대한 정보를 알 수 있습니다.

CURDATE() 는 항상 유동적인 삭제된 시간을 담아주기 위해 사용됩니다.

 


자 이제 트리거에 대한 사용 준비는 완료했습니다.

한번 삭제를 진행해보면서 이에 따른 데이터의 흐름을 보도록 하죠

 

8. 삭제된 회원정보 확인하기

 

실습을 통해 어느정도 전반적인 트리거에 대해 이해가 가셨나요 ?

 


사실 트리거(TRIGGER)란 녀석은 방화쇠 에 자주 비유가 됩니다. (단어의 뜻처럼)

방화쇠를 당기기 전에는 총알이 나가지 않지만, 방화쇠를 당기는 행위에 반응하여 총알이 나가는 것과 같이,

어떤 트랜잭션이 일어나면 거기에 반응해서 다른 명령을 실행하게 하는 기능을 하는 것이 트리거 입니다.

 

자 우리가 어떤 것을 배우고 사용할 때에는 사용하는 이유와 장단점이 있고, 때로는 어떤 것과 비교하는 법을 알아야 합니다.

 

트리거는 자주 프로시저와 연관되어 질문됩니다.

이는 추후에 다루도록 하겠습니다. 궁금하신 분들은 찾아보세요 !

 

트리거(TRIGGER)의 장점
- 데이터 무결성 강화 (참조 무결성)
- 업무 규칙의 설정
- 검사 기능의 확장

추가적으로 더욱 사용자 편의성을 제공하고, 효과적인 데이터 보관이 될 수 있겠죠?

 

트리거(TRIGGER)의 단점
- 유지보수의 어려움
- 예상치 못한 오류를 유발할 수 있음

이런 트리거를 무수히 많이 사용한다면, 작업 중간에 투입된 개발자들은 문서화 되지 않아 있다면, 파악하는데 상당한 어려움이 있을 것입니다.

 

언제나 사용 목적에 맞는 개발자가 되길 바라면서, 적절하고 효율적인 사용을 고려해보도록 합시다!

 

추가적으로 

생성 트리거 확인하기
show triggers;

생성된 트리거 확인하기

 

실습이 끝나면 항상 삭제 해주면서 삭제도 공부하기!

트리거 삭제하기
drop trigger [트리거명];

 

 

오늘 포스팅은 새 데이터베이스 생성부터 시작하여 트리거 사용까지 확인해 봤습니다.

아주 간단하고 기초적인 트리거 사용에 대한 포스팅이 였기 때문에, 상세한 내용은 추후 다루도록 하겠습니다.

(이게 끝이 아니란거 아시죠 ?!)

 

자 그럼 이만.

댓글
공지사항
글 보관함
최근에 올라온 글
최근에 달린 댓글