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

데베 15주차

by hoshi03 2023. 12. 8.

트리거 시험에 나온다

 

! 인덱스를 쓰지 않은 이상 update를 할때는 기본키만 된다. 기말엔 erd를 주고 트리거를 만드는 형태로 문제가 나온다!

쿼리문의 트리거를 보면서 이해

트리거는 남발했다간 성능이 저하되고 락이 걸릴 수 있다, 신중하게 쓰자

 

시험범위

조인,내장함수,외부조인,서브쿼리, 뷰, 트리거, 관계대수,
db설계이론

 

create database tritest;
use tritest;

create database trianswer;
use trianswer;

create table goods(
	pronum char(4) primary key,
    proname varchar(20) not null,
    price int,
    stock int default 0
    );
    
create table ordering(
	num int auto_increment primary key ,
    pronum char(4),
    orderdate date not null,
    account int check(account > 0),
    orderprice int check (orderprice > 0),
    foreign key (pronum) references goods(pronum) on update cascade on delete cascade
    );
    
create table sales(
	num int auto_increment primary key,
    pronum char(4),
    account int,
    foreign key (pronum) references goods(pronum)
    );


INSERT INTO goods ( pronum, proname, price ) VALUES ('AAAA', '새우깡', 1500);
INSERT INTO goods ( pronum, proname, price ) VALUES ('BBBB', '초코파이', 1200);
INSERT INTO goods ( pronum, proname, price ) VALUES ('CCCC', '짱구', 1500);

-- delimiter 쓰는 이유 <- 세미콜론 때문에 써야된다, 시험에는 delimiter까지 전부 다 써야된다!

delimiter //
create trigger triin
after insert on ordering for each row
begin
	update goods 
    set stock = stock +  new.account
    -- where의 pronum은 goods의 pronum, new.pronum은 ordering의 pronum이다
    where pronum = new.pronum;
end;//

delimiter //
create trigger triup
after update on ordering for each row
begin
	update goods 
    set stock = stock + (new.account - old.account)
    where pronum = new.pronum;
end;//

delimiter //
create trigger tridel
after delete on ordering for each row
begin
	update goods 
    set stock = stock - old.account
    where pronum = old.pronum;
end;//


delimiter //
create trigger triinsal
after insert on sales for each row
begin
	update goods 
    set stock = stock - new.account
    where pronum = new.pronum;
end;//

insert into ordering (pronum,orderdate,account,orderprice) values('AAAA','2023-11-21',10,1000);
insert into ordering (pronum,orderdate,account,orderprice) values('BBBB','2023-10-21',15,1000);
insert into ordering (pronum,orderdate,account,orderprice) values('CCCC','2023-09-11',10,1000);
insert into ordering (pronum,orderdate,account,orderprice) values('AAAA','2023-11-21',10,1000);

update ordering set account = 5 where num = 1;


select * from ordering;
select * from goods;

drop trigger triin;

delete from ordering where num = 10;

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

정규화  (1) 2023.12.26
데베 기말 시험대비  (0) 2023.12.12
데베 14주차  (1) 2023.12.01
데베 13주차  (0) 2023.11.24
데베 퀴즈 대비  (1) 2023.11.16