色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql 數據觸發器,mysql觸發器after和before的區別

榮姿康2年前17瀏覽0評論
mysql 數據觸發器,mysql觸發器after和before的區別?

數據庫中觸發器before與after認識

Before與After區別:

before:(insert、update)可以對new進行修改;after不能對new進行修改,兩者都不能修改old數據。

before是先完成觸發,再增刪改,觸發的語句先于監視的增刪改,這樣就有機會判斷,修改即將發生的操作;

after是先完成數據的增刪改,再觸發,觸發的語句晚于監視的增刪改操作,無法影響前面的增刪改動作;也就是說先插入訂單記錄,再更新數量;

示例:

商品表g和訂單表o和觸發器

假設商品表有商品1,數量是10;

在訂單表插入一條記錄

insert into o(gid,much) values(1,20);

如果創建的觸發器是after,則會發現在執行這個語句后,商品1的數量變成了-10。

也就是說觸發的語句是在插入訂單記錄之后才執行的,這個時候是無法判斷新插入訂單的購買數量。

運用典型案例來區分二者的區別,新建一個觸發器:

#監視地點: 商品表o

#監視事件:insert

#觸發時間:before

#觸發事件:update

案例:當新增一條訂單記錄時,判斷訂單的商品數量,如果數量大于10,就默認改為10

create trigger tg6

before insert on o

for each row

begin

if new.much > 10 then

set new.much = 10;

end if;

update g set num = num - new.much where id = new.gid;

end$

執行完,把之前創建的after觸發器刪掉,再來插入一條訂單記錄:

insert into o(gid,much) valus(1,20)$

執行完會發現訂單記錄的數量變為10,商品1的數量變為0了,就不會出現負數了