트리거
트리거는 속도를 느리게함
데이터 변경이 일어날때 자동으로 실행되는 프로시저
before : 거의 사용 안함
New.필드(애트리뷰트)명
Old.필드(애트리뷰트)명

뷰 : 유도된 테이블
- 같은 작업을 하려면 뷰가 유리
트리거 : 특정조건이 만족하면 저절로 실행 되는 일종의 함수
- 프로시저나 함수와 다르게 한번 정의하면 조건에 해당하는 동작이 수행되는 작업
- 남발하면 안됨, 컴퓨터 느려짐 요즘은 속도 싸움이다
- 예시 : 장바구니에서 취소하면 그 수량만큼이나 재고에서 추가되는 거 같은거
- 2가지 행동을 못함
행트리거
- for each row : 각각 실행
[트리거 이벤트]
- after
- 동작수행 후
- before
- 백업용
트리거 종류
- 문장 트리거
- insert
- update
- delete
after insert on Triaa for each row
begin
sql문으로 정의
end
[ 트리거 키워드]
new,필드명 : insert, update
old.필드명 : delete
트리거 연습
- 고객이 물건을 구매하면 그 구매 기록이 구매 테이블에 삽입 된다
- 구매 테이블에 부착된 insert 트리거가 작동하면서 물품 테이블의 남은 개수에서 구매한 개수를 뺴도록 수정(update)한다(인터넷 쇼핑몰에서 물건을 구매하면 그 즉시 남은 수량이 줄어든는 것을 보았을 것이다.)
- 물품 테이블에 장착된 update트리거가 작동하면서 배송 테이블에 배송할 내용을 삽입(insert)한다.
create database extri;
use extri;
create table goods
(
proname varchar(20) primary key,
account int
);
insert into goods values('사과',100);
insert into goods values('포도',100);
insert into goods values('딸기',100);
select * from goods;
create table ordering
(
orderid int auto_increment primary key,
userid varchar(20),
-- 외래키지만 이번에는 트리거만 연습하기 때문에 안함
proname varchar(20),
ordercount int
);
create table deliver
(
delno int auto_increment primary key,
proname varchar(20),
delcount int
);
-- 트리거는 업데이트 말고 삭제 후 재생성이 편함
-- 1. ordering 주문(insert) 시 goods account 개수 변경
delimiter //
create trigger triin
after insert on ordering for each row
begin
update goods set account = account - new.ordercount
where proname = new.proname;
end;
//
-- 2. goods 테이블에 accout 가 감소하면 배송(deliver)
delimiter //
create trigger triup
after update on goods for each row
begin
-- 필드명 생략 불가
insert into deliver (proname,delcount)
values (new.proname, old.account - new.account);
end;
//
-- 확인
insert into ordering (userid,proname,ordercount)
values ('hong', '사과', 10);
select * from ordering;
select * from deliver;
select * from goods;
ordering table
1 | hong | 사과 | 10 |
2 | hong | 사과 | 10 |
3 | hong | 사과 | 10 |
4 | hong | 사과 | 10 |
deliver table
1 | 사과 | 10 |
2 | 사과 | 10 |
3 | 사과 | 10 |
4 | 사과 | 10 |
goods table
딸기 | 100 |
사과 | 60 |
포도 | 100 |