Mysql進階之觸發器

來源:互聯網
上載者:User

標籤:style   blog   http   color   ar   sp   for   資料   on   

原文: 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


查看哪些觸發器:






Mysql進階之觸發器

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.