본문 바로가기
데이터 베이스/MySQL

MYSQL 트리거&TRIGGER 예제&문제 17

by 인생여희 2016. 12. 20.
반응형


트리거 


트리거는 테이블에 삽입 , 수정, 삭제등의 작업을 할때 자동으로 작동되는 개체로 

프로시저와 비슷한 모양을 갖는다.

하지만 트리거에는 스토어드 프로시저와 달리 IN OUT 매개변수를 사용할 수도 없다. 



-- 테이블 생성 


SELECT * FROM testTbl;


create TABLE IF NOT EXISTS testTbl5(id INT, txt VARCHAR(10));


INSERT INTO testTbl5 VALUES(1,'EXID');



INSERT INTO testTbl5 VALUES(2,'AFTERS');



INSERT INTO testTbl5 VALUES(3,'IOI');



DROP TRIGGER IF EXISTS testTrg;


DELIMITER //

CREATE TRIGGER testTrg -- 트리거 이름 

AFTER DELETE -- 삭제 후에 작동되도록 지정

    ON testTbl5 -- 트리거를 부착할 테이블

    for each row -- 각행마다 적용시킴  

    

begin 

set @msg = 'delete complet'; -- 트리거 실행시 작동되는 코드 


end //

delimiter ;





-- 데이터를 삽입 , 수정, 삭제 해보자 


set @msg = '';


insert into testTbl5 VALUES(4,'nine');

select @msg;


update testTbl5 set txt = 'apink' where id = 3;

select @msg;


delete from testTbl5 where id = 4;

select @msg;





--  paste table make


create TABLE IF NOT EXISTS checkcheck(id INT, txt VARCHAR(10));


-- update


DROP TRIGGER IF EXISTS backupTbl;

DELIMITER $$

CREATE TRIGGER backupTbl

AFTER UPDATE

    ON testTbl5

for each row

begin

insert into checkcheck VALUES(OLD.id,OLD.txt);

    

END //

DELIMITER ;



-- delete



DROP TRIGGER IF EXISTS backup_del_Tbl;

DELIMITER $$

CREATE TRIGGER backup_del_Tbl

AFTER delete

    ON testTbl5

for each row

begin

insert into checkcheck VALUES(OLD.id,OLD.txt);

END //

delimiter ;



-- CHECK TABLE


SELECT * FROM testTbl5;



update testTbl5 set txt ='big' where id = 1;


delete from testTbl5 where id=2;

commit;


select * from checkcheck;



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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
 
트리거 
 
 
 
트리거는 테이블에 삽입 , 수정, 삭제등의 작업을 할때 자동으로 작동되는 개체로 
 
프로시저와 비슷한 모양을 갖는다.
 
하지만 트리거에는 스토어드 프로시저와 달리 IN OUT 매개변수를 사용할 수도 없다. 
 
 
 
 
 
-- 테이블 생성 
 
 
 
SELECT * FROM testTbl;
 
 
 
create TABLE IF NOT EXISTS testTbl5(id INT, txt VARCHAR(10));
 
 
 
INSERT INTO testTbl5 VALUES(1,'EXID');
 
 
 
 
 
INSERT INTO testTbl5 VALUES(2,'AFTERS');
 
 
 
 
 
INSERT INTO testTbl5 VALUES(3,'IOI');
 
 
 
 
 
DROP TRIGGER IF EXISTS testTrg;
 
 
 
DELIMITER //
 
CREATE TRIGGER testTrg -- 트리거 이름 
 
    AFTER DELETE        -- 삭제 후에 작동되도록 지정
 
    ON testTbl5            -- 트리거를 부착할 테이블
 
    for each row        -- 각행마다 적용시킴  
 
    
 
begin 
 
    set @msg = 'delete complet'-- 트리거 실행시 작동되는 코드 
 
 
 
end //
 
delimiter ;
 
 
 
 
 
 
 
 
 
-- 데이터를 삽입 , 수정, 삭제 해보자 
 
 
 
set @msg = '';
 
 
 
insert into testTbl5 VALUES(4,'nine');
 
select @msg;
 
 
 
update testTbl5 set txt = 'apink' where id = 3;
 
select @msg;
 
 
 
delete from testTbl5 where id = 4;
 
select @msg;
 
 
 
 
 
 
 
 
 
--  paste table make
 
 
 
create TABLE IF NOT EXISTS checkcheck(id INT, txt VARCHAR(10));
 
 
 
-- update
 
 
 
DROP TRIGGER IF EXISTS backupTbl;
 
DELIMITER $$
 
CREATE TRIGGER backupTbl
 
    AFTER UPDATE
 
    ON testTbl5
 
    for each row
 
begin
 
    insert into checkcheck VALUES(OLD.id,OLD.txt);
 
    
 
END //
 
DELIMITER ;
 
 
 
 
 
-- delete
 
 
 
 
 
DROP TRIGGER IF EXISTS backup_del_Tbl;
 
DELIMITER $$
 
CREATE TRIGGER backup_del_Tbl
 
    AFTER delete
 
    ON testTbl5
 
    for each row
 
begin
 
    insert into checkcheck VALUES(OLD.id,OLD.txt);
 
END //
 
delimiter ;
 
 
 
 
 
-- CHECK TABLE
 
 
 
SELECT * FROM testTbl5;
 
 
 
 
 
update testTbl5 set txt ='big' where id = 1;
 
 
 
delete from testTbl5 where id=2;
 
commit;
 
 
 
select * from checkcheck;
cs


반응형

댓글