mysql觸發(fā)器簡(jiǎn)介及如何創(chuàng)建和刪除觸發(fā)器

什么是mysql觸發(fā)器

需要mysql 5 對(duì)觸發(fā)器的支持是在MySQL 5中增加的。因此,本章內(nèi)容適用于MySQL 5或之后的版本。

MySQL語(yǔ)句在需要時(shí)被執(zhí)行,存儲(chǔ)過(guò)程也是如此。但是,如果你想要某條語(yǔ)句(或某些語(yǔ)句)在事件發(fā)生時(shí)自動(dòng)執(zhí)行,怎么辦呢?例如:

1.每當(dāng)增加一個(gè)顧客到某個(gè)數(shù)據(jù)庫(kù)表時(shí),都檢查其電話號(hào)碼格式是否正確,州的縮寫是否為大寫;

2.每當(dāng)訂購(gòu)一個(gè)產(chǎn)品時(shí),都從庫(kù)存數(shù)量中減去訂購(gòu)的數(shù)量;

3.無(wú)論何時(shí)刪除一行,都在某個(gè)存檔表中保留一個(gè)副本。

所有這些例子的共同之處是它們都需要在某個(gè)表發(fā)生更改時(shí)自動(dòng)處理。這確切地說(shuō)就是觸發(fā)器。觸發(fā)器是MySQL響應(yīng)以下任意語(yǔ)句而自動(dòng)執(zhí)行的一條MySQL語(yǔ)句(或位于 BEGIN 和 END 語(yǔ)句之間的一組語(yǔ)句):

1.DELETE ;

2.INSERT ;

3.UPDATE 。

其他MySQL語(yǔ)句不支持觸發(fā)器。


創(chuàng)建mysql觸發(fā)器

在創(chuàng)建觸發(fā)器時(shí),需要給出4條信息:

1.唯一的觸發(fā)器名;

2.觸發(fā)器關(guān)聯(lián)的表;

3.觸發(fā)器應(yīng)該響應(yīng)的活動(dòng)( DELETE 、 INSERT 或 UPDATE );

4.觸發(fā)器何時(shí)執(zhí)行(處理之前或之后)。

保持每個(gè)數(shù)據(jù)庫(kù)的觸發(fā)器名唯一 在MySQL 5中,觸發(fā)器名必須在每個(gè)表中唯一,但不是在每個(gè)數(shù)據(jù)庫(kù)中唯一。這表示同一數(shù)據(jù)庫(kù)中的兩個(gè)表可具有相同名字的觸發(fā)器。這在其他每個(gè)數(shù)據(jù)庫(kù)觸發(fā)器名必須唯一的DBMS中是不允許的,而且以后的MySQL版本很可能會(huì)使命名規(guī)則更為嚴(yán)格。因此,現(xiàn)在最好是在數(shù)據(jù)庫(kù)范圍內(nèi)使用唯一的觸發(fā)器名。

觸發(fā)器用 CREATE TRIGGER 語(yǔ)句創(chuàng)建。下面是一個(gè)簡(jiǎn)單的例子:

輸入:

create?trigger?newproduct?after?insert?on?proucts?for?each?row?select?'product?added';

分析:CREATE TRIGGER 用來(lái)創(chuàng)建名為 newproduct 的新觸發(fā)器。觸發(fā)器可在一個(gè)操作發(fā)生之前或之后執(zhí)行,這里給出了 AFTER INSERT ,所以此觸發(fā)器將在 INSERT 語(yǔ)句成功執(zhí)行后執(zhí)行。這個(gè)觸發(fā)器還指定 FOR EACH ROW ,因此代碼對(duì)每個(gè)插入行執(zhí)行。在這個(gè)例子中,文本 Product added 將對(duì)每個(gè)插入的行顯示一次。為了測(cè)試這個(gè)觸發(fā)器,使用 INSERT 語(yǔ)句添加一行或多行到 products

中,你將看到對(duì)每個(gè)成功的插入,顯示 Product added 消息。

僅支持表 只有表才支持觸發(fā)器,視圖不支持(臨時(shí)表也不支持)。

觸發(fā)器按每個(gè)表每個(gè)事件每次地定義,每個(gè)表每個(gè)事件每次只允許一個(gè)觸發(fā)器。因此,每個(gè)表最多支持6個(gè)觸發(fā)器(每條 INSERT 、 UPDATE和 DELETE 的之前和之后)。單一觸發(fā)器不能與多個(gè)事件或多個(gè)表關(guān)聯(lián),所以,如果你需要一個(gè)對(duì) INSERT 和 UPDATE 操作執(zhí)行的觸發(fā)器,則應(yīng)該定義

兩個(gè)觸發(fā)器。

觸發(fā)器失敗 如果 BEFORE 觸發(fā)器失敗,則MySQL將不執(zhí)行請(qǐng)求的操作。此外,如果 BEFORE 觸發(fā)器或語(yǔ)句本身失敗,MySQL將不執(zhí)行 AFTER 觸發(fā)器(如果有的話)。

刪除mysql觸發(fā)器

現(xiàn)在,刪除觸發(fā)器的語(yǔ)法應(yīng)該很明顯了。為了刪除一個(gè)觸發(fā)器,可使用 DROP TRIGGER 語(yǔ)句,如下所示:

輸入:

drop?trigger?newproduct?;

分析:觸發(fā)器不能更新或覆蓋。為了修改一個(gè)觸發(fā)器,必須先刪除它,然后再重新創(chuàng)建。

【相關(guān)推薦】

1. mysql免費(fèi)視頻教程

2.?mysql免費(fèi)視頻教程

3.?mysql免費(fèi)視頻教程

4.?mysql免費(fèi)視頻教程

5.?mysql免費(fèi)視頻教程

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