trigger
進(jìn)行數(shù)據(jù)庫應(yīng)用軟件開發(fā)時(shí)竖螃,我們有時(shí)會(huì)碰到表中的某些數(shù)據(jù)改變淑廊,希望同時(shí)引起其他相關(guān)數(shù)據(jù)改變的需求,利用觸發(fā)器就能滿足這樣的需求特咆。它能在表中的某些特定數(shù)據(jù)變化時(shí)自動(dòng)完成某些查詢季惩。運(yùn)用觸發(fā)器不僅可以簡(jiǎn)化程序,而且可以增加程序的靈活性
觸發(fā)器是一類特殊的事務(wù)腻格,可以監(jiān)視某種數(shù)據(jù)操作(insert/update/delete)画拾,并觸發(fā)相關(guān)操作(insert/update/delete)。
監(jiān)視地點(diǎn)(table)菜职、監(jiān)視事件(insert/update/delete)青抛、觸發(fā)時(shí)間(after/before)、觸發(fā)事件(insert/update/delete)
需求:
商品表:goods 訂單表:ord
當(dāng)下一個(gè)訂單時(shí)酬核,對(duì)應(yīng)的商品數(shù)量要相應(yīng)減少
分析:
監(jiān)視:ord
監(jiān)視動(dòng)作:insert
觸發(fā)時(shí)間:after
觸發(fā)事件:update
create trigger 觸發(fā)器名稱
after/before
insert/update/delete
on 監(jiān)視表
for each row? //行級(jí)觸發(fā)器
begin
sql1
...
sqln
end;
delimiter //
create trigger t1
after
insert
on ord
for each row
begin
update goods set num=num-new.much where gid=new.gid;
end//
create trigger t2
after
delete
on ord
for each row
begin
update goods set num = num + old.much where gid=old.gid
end//
#修改訂單數(shù)量(僅限改數(shù)量)
create trigger t3
before
update
on ord
for each row
begin
update goods set num = num + old.much - new.much where gid=old.gid
end//
delmiter ;
show triggers;
drop trigger t1;
delmiter //
#判斷庫存是否足夠
create trigger t1
before
insert
on ord
for each row
begin
#聲明變量
declare
goods_num int;
select num into goods_num from goods where gid = new.gid;
#判斷
if new.much > goods_num then
set new.much = goods_num;
end if;
update goods set num = num - new.much where gid=new.gid
end//
delmiter ;