Mysql高級之觸發(fā)器

觸發(fā)器是一類特殊的事務(wù) ,可以監(jiān)視某種數(shù)據(jù)操作(insert/update/delete),并觸發(fā)相關(guān)操作(insert/update/delete)。

Mysql高級之觸發(fā)器

看以下事件:

Mysql高級之觸發(fā)器

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

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

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

?

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

?

?

用觸發(fā)器可以解決上述問題.

我們可以監(jiān)視某表的變化,當(dāng)發(fā)生某種變化時,觸發(fā)某個操作.

Mysql高級之觸發(fā)器

創(chuàng)建觸發(fā)器的語法

Create?trigger?triggerName?

After/before?insert/update/delete??on?表名

For?each?row?#這句話是固定的

Begin

Sql語句;??#?一句或多句,insert/update/delete范圍內(nèi)

End;

?

刪除觸發(fā)器的語法:

Drop?trigger?觸發(fā)器名

?

查看觸發(fā)器

Show?triggers

Mysql高級之觸發(fā)器

如何在觸發(fā)器引用行的值

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

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

?

對于?delete來說,?原本有一行,后來被刪除,

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

?

對于update來說,

被修改的行,?

修改前的數(shù)據(jù)?,用?old來表示,?old.列名引用被修改之前行中的值

修改后的數(shù)據(jù),用new?來表示,?new.列名引用被修改之后行中的值

Mysql高級之觸發(fā)器

Mysql高級之觸發(fā)器

觸發(fā)器里after?和before的區(qū)別

After?是先完成數(shù)據(jù)的增,刪,改再觸發(fā),

觸發(fā)的語句晚于監(jiān)視的增,刪,改,無法影響前面的增刪改動作.

?

Before是先完成觸發(fā),再增刪改,

觸發(fā)的語句先于監(jiān)視的增,刪,改發(fā)生,我們有機(jī)會判斷,修改即將發(fā)生的操作.

?

?

典型案例:

對于所下訂單,進(jìn)行判斷,如果訂單的數(shù)量?>?5?,就認(rèn)為是惡意訂單,

強(qiáng)制把所訂的商品數(shù)量改成5

Mysql高級之觸發(fā)器

查看哪些觸發(fā)器:

Mysql高級之觸發(fā)器

Mysql高級之觸發(fā)器

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊7 分享