트리거는 자동수행하는.
그러니까 특정 테이블에 insert, delete, update등이 작동할 때 자동으로 실행되게끔 할 수 있음.
일반적으로 after를 많이 씀.
정의는 스토어드 프로시저랑 비슷한데, call로 따로 호출할 수는 없음.
그래서 in, out 등의 매개변수도 불가.
delimiter $$
create trigger myTrigger
after delete
on trigger_table
for each row
begin
set @msg = '가수 그룹이 삭제됨';
end $$
delimiter ;
이렇게 스토어드 프로시저 정의 하듯,
delimiter로 시작해서,
create trigger 하면서 시작함.
after delete는 delete 후에.
on trigger_table이라는 테이블에서
for each row 각각의 row마다 적용
begin
~~~
end $$
끝임.
delimiter $$
create trigger 트리거명
after또는before insert,delete,update등언제작동할지
on 대상테이블
for each row -- 각각의 행 마다
begin
-- ~~트리거시 (insert, delete, update 등이 작동 시) 할 내용
end $$
delimiter ;
실제로 이거
set @msg = '';
insert into trigger_table values(4, '마마무');
select @msg;
update trigger_table set txt='블핑' where id = 3;
select @msg;
delete from trigger_table where id = 4;
select @msg;
delete 했을 때 작동.
이게 좋은 점이, backup만들기 편함.
create table backup_singer(
mem_id char(8) not null,
mem_name varchar(10) not null,
mem_number int not null,
addr char(2) not null,
modType char(2), -- 변경된 타입. 수정 또는 삭제
modDate date, -- 변경 날짜
modUser varchar(30) -- 변경 사용자
);
delimiter $$
create trigger singer_updateTrg
after update
on singer
for each row
begin
insert into backup_singer values(old.mem_id, old.mem_name, old.mem_number, old.addr, '수정', curdate(), current_user());
end $$
delimiter ;
drop trigger if exists singer_deleteTrg;
delimiter $$
create trigger singer_deleteTrg
after delete
on singer
for each row
begin
insert into backup_singer values(old.mem_id, old.mem_name, old.mem_number, old.addr, '삭제', curdate(), current_user());
end $$
delimiter ;
백업용 테이블 생성하고,
트리거 정의
update 이후,
singer라는 테이블에서 (singer라는 테이블에서 update 이후)
각 행마다 적용 시키는 걸로.
insert into backup_singer values(old.mem_id, old.mem_name, old.mem_number, old.addr, '수정', curdate(), current_user());
백업 테이블에 modType만 '수정'으로 하고 현재시간, 현재 유저(현재 db유저)를 넣어줌.
old는 mysql에서 제공해 주는거임. new도 있음.
이런 거임.
대충 뭔가 CUD로 바꾸기 전에, 그 전의 값을 old에 담아두고, 새로 들어오는 값들을 new에다 담아둠.
insert into backup_singer values(old.mem_id, old.mem_name, old.mem_number, old.addr, '수정', curdate(), current_user());
다시 보면 이전 값들을 우리가 update했을때 이후에
저렇게 이전 값들을 백업테이블에다가 써 주는데,
전의 값들을 써줌.
삭제도 마찬가지로.
전의 값 담아두면서 수정형식만 '삭제'라고 해둠.
delimiter $$
create trigger 트리거명
after또는before insert,delete,update등언제작동할지
on 대상테이블
for each row -- 각각의 행 마다
begin
-- ~~트리거시 (insert, delete, update 등이 작동 시) 할 내용
end $$
delimiter ;