--觸發器是一類特殊的監控增刪改操作,並產生相應的增刪改的操作--1,監視誰 2,監視動作 3,監視時間(之前或之後) 4,觸發的事件
--觸發器的簡單語法
create trigger 觸發器名字 after/before(觸發時間)insert/delete/update(監視事件) on 表名 (監視位址)
for each row begin sql語句; end;
--因為一條sql語句只能有乙個邊界符,所以上面語句會發生錯誤,用delimiter $--將邊界符改為$ 這樣就不會發生衝突
--同乙個表在同一時間同意動作不能有不同的觸發器
--檢視已有的觸發器 show triggers;
--刪除指定的觸發器 drop trigger 觸發器名字;
--建表語句create table goods(
goods_id int not null,
goods_name varchar(30) not null default '',
goods_num int
)engine myisam charset utf8;
--插入資料
insert into goods values (1,'cat',32),(2,'dog',42),(3,'rab',43);
--建立訂單表
create table ord(
id int not null,
goods_id int not null,
num int not null default 0
)engine myisam charset utf8;
--更改邊界,最後不需要分號;delimiter $
--建立觸發器,當ord表插入一條資料(1,1,1)時 商品cat數量減1
create trigger trig1
after
insert
on ord
for each row
begin
update goods set goods_num=goods_num-1 where goods_id=1;
end$
--然後插入一條資料
insert into ord values (1,1,1)$
--goods表確實減少了1,但是這個觸發器不具有通用性,
--不管買幾個商品和買多少商品,總是cat商品減1
drop trigger trig1$
--舊的一行資料物件old,新的一條資料物件new
create trigger trig2
after
insert
on ord
for each row
begin
update goods set goods_num=goods_num-new.num where goods_id=new.goods_id;
end$
--這個觸發器具有通用性
--監控delete語句,當刪除訂單時,需要再把商品加回來
create trigger trig3
after
delete
on ord
for each row
begin
update goods set goods_num=goods_num+old.num where goods_id=old.goods_id;
end$
--監控update語句,當更新表時,產生相應的操作,在不修改商品型別的情況
create trigger trig4
after
update
on ord
for each row
begin
update goods set goods_num=goods_num+old.num-new.num where goods_id=new.goods_id;
end$
--在這種情況下,會出現爆倉的情況,因為更新的資料可能超過商品的庫存量
drop trigger trig4$
create trigger trig4
before
update
on ord
for each row
begin
declare gnum int;
select goods_num into gnum from goods where goods_id=new.goods_id;
if (new.num-old.num)>gnum then
set new.num=gnum+old.num;
end if;
update goods set goods_num=goods_num+old.num-new.num where goods_id=new.goods_id;
end$
--insert也會出現這種情況,也要更改一下
drop trigger trig2$
create trigger trig2
before
insert
on ord
for each row
begin
declare gnum int ;
select goods_num into gnum from goods where goods_id=new.goods_id;
if new.num>gnum then
set new.num=gnum;
end if;
update goods set goods_num=goods_num-new.num where goods_id=new.goods_id;
end$
資料庫 MySQL觸發器
觸發器 trigger 監視某種情況,並觸發某種操作。觸發器建立語法四要素 1.監視地點 table 2.監視事件 insert update delete 3.觸發時間 after before 4.觸發事件 insert update delete 語法 create trigger trigg...
mysql資料庫的觸發器 Mysql資料庫觸發器
我還是msyql資料庫觸發器的新手.我想問一下我的台詞 create trigger secure dml3 before delete on t pembelian begin if select to char sysdate,dy in sun or select to char sysdat...
資料庫中的觸發器
在進行資料庫應用軟體的開發時,我們有時會碰到表中的某些資料改變,希望同時引起其他相關資料改變的需求,利用觸發器就能滿足這樣的需求。它能在表中的某些特定資料變化時自動完成某些查詢。運用觸發器不僅可以簡化程式,而且可以增加程式的靈活性。下面就對觸發器的基本概念 它的應用場合進行一下簡單的敘述。觸發器是一...