mysql觸發(fā)器簡(jiǎn)介及如何創(chuàng)建與刪除觸發(fā)器
發(fā)表時(shí)間:2023-08-28 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]什么是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í),都檢...
什么是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)碼格式是否正確,州的縮寫(xiě)是否為大寫(xiě);
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使用字符集和校對(duì)順序使用教程
3. MySQL字符集和校對(duì)順序簡(jiǎn)介
4. MySQL事務(wù)-使用保留點(diǎn)、更改默認(rèn)的提交行為詳解
5. MySQL事務(wù)-ROLLBACK,COMMIT用法詳解
以上就是mysql觸發(fā)器簡(jiǎn)介及如何創(chuàng)建和刪除觸發(fā)器的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門(mén)到精通的SQL知識(shí)。