티스토리 뷰

IA/DB

[mysql] trigger

kiostory 2019. 3. 1. 21:34

trigger

- insert, update, delete 발생시 이에 따른 후속 행위를 자동 수행

- 아래 예제 : membertbl에서 데이터 하나 삭제시 삭제된 데이터의 저장 테이블(deletedmembertbl)로 자동 insert되고 일시표시


현재 membertbl 데이터

mysql> select * from membertbl;

+----------+------------+-----------------+
| memberid | membername | memberaddress   |
+----------+------------+-----------------+
| Dang     | DangTangYi | Bucheon, Korea  |
| Figure   | Yeona      | GangNam, Korea  |
| Han      | JuYeon     | Incheon, Korea  |
| Jee      | JiWoon     | Seoul, Korea    |
| Sang     | SangGil    | SeongNam, Korea |
+----------+------------+-----------------+
5 rows in set (0.00 sec)


타입확인

mysql> desc membertbl;
+---------------+----------+------+-----+---------+-------+
| Field         | Type     | Null | Key | Default | Extra |
+---------------+----------+------+-----+---------+-------+
| memberid      | char(20) | NO   | PRI | NULL    |       |
| membername    | char(20) | NO   |     | NULL    |       |
| memberaddress | char(20) | YES  |     | NULL    |       |
+---------------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)


삭제된 데이터 저장 테이블 생성

mysql> create table deletedmembertbl (
    -> memberid char(20),
    -> membername char(20),
    -> memberaddress char(20),
    -> deletedata datetime);
Query OK, 0 rows affected (0.01 sec)


확인

mysql> show tables;
+------------------+
| Tables_in_shopdb |
+------------------+
| deletedmembertbl |
| indextbl         |
| membertbl        |
| producttbl       |
| uv_membertbl     |
+------------------+
5 rows in set (0.00 sec)


트리거 생성

mysql> delimiter //
mysql> create trigger trg_deletedmembertbl
    -> after delete
    -> on membertbl
    -> for each row
    -> begin
    ->     insert into deletedmembertbl values (
    ->     old.memberid, old.membername, old.memberaddress, now());
    -> end //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;


Dang을 삭제해보자
mysql> select * from membertbl;
+----------+------------+-----------------+
| memberid | membername | memberaddress   |
+----------+------------+-----------------+
| Dang     | DangTangYi | Bucheon, Korea  |
| Figure   | Yeona      | GangNam, Korea  |
| Han      | JuYeon     | Incheon, Korea  |
| Jee      | JiWoon     | Seoul, Korea    |
| Sang     | SangGil    | SeongNam, Korea |
+----------+------------+-----------------+
5 rows in set (0.00 sec)


삭제

mysql> delete from membertbl where membername='DangTangYi';
Query OK, 1 row affected (0.00 sec)


확인, 삭제되었음

mysql> select * from membertbl;
+----------+------------+-----------------+
| memberid | membername | memberaddress   |
+----------+------------+-----------------+
| Figure   | Yeona      | GangNam, Korea  |
| Han      | JuYeon     | Incheon, Korea  |
| Jee      | JiWoon     | Seoul, Korea    |
| Sang     | SangGil    | SeongNam, Korea |
+----------+------------+-----------------+
4 rows in set (0.00 sec)


삭제된 Dang이 트리거에 의해 deletedmembertbl에 정상 insert되었는지 확인

mysql> select * from deletedmembertbl;
+----------+------------+----------------+---------------------+
| memberid | membername | memberaddress  | deletedata          |
+----------+------------+----------------+---------------------+
| Dang     | DangTangYi | Bucheon, Korea | 2019-03-01 21:21:46 |
+----------+------------+----------------+---------------------+
1 row in set (0.00 sec)

mysql>

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함