程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql高級之觸發器

Mysql高級之觸發器

編輯:MySQL綜合教程

Mysql高級之觸發器


觸發器是一類特殊的事務 ,可以監視某種數據操作(insert/update/delete),並觸發相關操作(insert/update/delete)。

\

看以下事件:

\

 

完成下單與減少庫存的邏輯

Insert into o (gid,num) values (2,3); // 插入語句

Update g set goods_num = goods_num - 3 where id = 2;// 更新過程

這兩個邏輯可以看成一個整體,或者說, insert ---> 引來 update

用觸發器可以解決上述問題.

我們可以監視某表的變化,當發生某種變化時,觸發某個操作.

\

創建觸發器的語法

Create trigger triggerName

After/before insert/update/delete on 表名

For each row #這句話是固定的

Begin

Sql語句; # 一句或多句,insert/update/delete范圍內

End;

刪除觸發器的語法:

Drop trigger 觸發器名

查看觸發器

Show triggers

\

如何在觸發器引用行的值

對於insert而言, 新增的行 用new 來表示,

行中的每一列的值 ,用new.列名來表示.

對於 delete來說, 原本有一行,後來被刪除,

想引用被刪除的這一行,用old,來表示, old.列名,就可以引用被刪行中的值.

對於update來說,

被修改的行,

修改前的數據 ,用 old來表示, old.列名引用被修改之前行中的值

修改後的數據,用new 來表示, new.列名引用被修改之後行中的值

\

\

 

觸發器裡after 和before的區別

After 是先完成數據的增,刪,改再觸發,

觸發的語句晚於監視的增,刪,改,無法影響前面的增刪改動作.

Before是先完成觸發,再增刪改,

觸發的語句先於監視的增,刪,改發生,我們有機會判斷,修改即將發生的操作.

典型案例:

對於所下訂單,進行判斷,如果訂單的數量 > 5 ,就認為是惡意訂單,

強制把所訂的商品數量改成5

\

查看哪些觸發器:

\

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved