MySQL觸發器 trigger之after與before區分,mysqltrigger

來源:互聯網
上載者:User

MySQL觸發器 trigger之after與before區分,mysqltrigger
after:是先完成資料的增刪改,然後再觸發,觸發的語句晚於監視的增刪改,無法影響前面的增刪改動作;也就是說先插入訂單記錄,再更新商品數量。當商品數量少於訂單數量時造成爆庫。before:先完成觸發,在進行增刪改,觸發語句先於監視的增刪改,我們就有機會判斷,修改即將發生的操作。案例操作:觸發器使用after:當某個訂單的數量超過庫存的數量時會出現庫存為負數。造成所謂的爆庫問題。

#建立觸發器test4CREATE TRIGGER test4AFTERINSERTON `ord`FOR EACH ROWBEGINUPDATE goods SET num= num - new.much WHERE goods_id = new.gid;END$$


觸發器使用before:先觸發,在判斷處理之後再進行增刪改不會,根據庫存修改了訂單的最大數量。當然我這隻是簡單的固定了一個值,其實可以用語句擷取到動態庫存值。
#建立觸發器test5CREATE TRIGGER test5BEFOREINSERTON `ord`FOR EACH ROWBEGIN  IF new.much >26 THEN     SET new.much = 26;  END IF;UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;END$$



觸發器before與after有什不同?

呵呵,看來你不熟悉觸發器呀
無論是insert觸發器還是update觸發器,他都有一個before或者after關鍵字
before 就是在insert或update之前執行觸發器
after 就是在insert或update之後執行觸發器
例:
CREATE OR REPLACE TRIGGER TR_1 before UPDATE ON TABLE
這和在觸發器中用inserted 和updated沒關係
 
oracle觸發器before與after的問題解答

1、觸發器的作用,是每一條記錄處理前後進行相應的處理,也就是說你每次處理一條emp的記錄,都會執行一次drop和creare emp_c表。。。不要這樣做啊,否則你插入1000條記錄,就會重建1000次emp_c表
2、commit在觸發器裡面並不會提交當前事務,事實上insert emp和觸發器是在同一個事物中的,相反,只有在這個事物最後,也就是說你的insert emp提交之後,emp_c才會真正提交。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.