본문 바로가기
학교강의/데이터베이스

데이터베이스 13주차

by Fel.Forest 2023. 11. 24.

트리거

트리거는 속도를 느리게함

데이터 변경이 일어날때 자동으로 실행되는 프로시저

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

 

트리거 연습

  1. 고객이 물건을 구매하면 그 구매 기록이 구매 테이블에 삽입 된다
  2. 구매 테이블에 부착된 insert 트리거가 작동하면서 물품 테이블의 남은 개수에서 구매한 개수를 뺴도록 수정(update)한다(인터넷 쇼핑몰에서 물건을 구매하면 그 즉시 남은 수량이 줄어든는 것을 보았을 것이다.)
  3. 물품 테이블에 장착된 update트리거가 작동하면서 배송 테이블에 배송할 내용을 삽입(insert)한다.
  4.  
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

'학교강의 > 데이터베이스' 카테고리의 다른 글

14주차 데이터베이스  (1) 2023.12.01
11주차  (0) 2023.11.17
데베 10주차  (2) 2023.11.03
데베 9주차  (2) 2023.10.27
데베 7주차  (1) 2023.10.13