介紹MySQL觸發(fā)器
MySQL觸發(fā)器是一種用于在MySQL數(shù)據(jù)庫(kù)操作期間自動(dòng)執(zhí)行相應(yīng)SQL語(yǔ)句的數(shù)據(jù)庫(kù)對(duì)象。它們可以自動(dòng)跟蹤數(shù)據(jù)變更并執(zhí)行相應(yīng)的過(guò)程。觸發(fā)器在創(chuàng)建時(shí)與數(shù)據(jù)庫(kù)對(duì)象綁定,如表、視圖等。MySQL支持在表級(jí)別和行級(jí)別建立觸發(fā)器。MySQL觸發(fā)器有三個(gè)事件:BEFORE、AFTER和INSTEAD OF。
MySQL觸發(fā)器的參數(shù)
MySQL觸發(fā)器建立時(shí)需要提供以下參數(shù):
· 觸發(fā)器名字:表示觸發(fā)器的名字,可以為任何合法的MySQL標(biāo)識(shí)符。
· 觸發(fā)器所關(guān)聯(lián)的表名:表示觸發(fā)器將會(huì)影響的表名。
· 觸發(fā)器類型:表示觸發(fā)器將在何時(shí)觸發(fā),如BEFORE、AFTER以及INSTEAD OF。
· 觸發(fā)器事件:表示觸發(fā)器將監(jiān)視何種事件,如INSERT、UPDATE以及DELETE。
· 觸發(fā)器執(zhí)行的SQL語(yǔ)句:指定觸發(fā)器所執(zhí)行的SQL語(yǔ)句,如UPDATE、DELETE SQL語(yǔ)句等。
觸發(fā)器執(zhí)行順序
MySQL觸發(fā)器的執(zhí)行順序按照以下方式進(jìn)行:
1. 執(zhí)行INSERT、UPDATE或DELETE語(yǔ)句。
2. 調(diào)用BEFORE觸發(fā)器,若定義有多個(gè)BEFORE觸發(fā)器,按照它們的建立順序執(zhí)行。
3. 執(zhí)行INSERT、UPDATE或DELETE語(yǔ)句。
4. 調(diào)用AFTER觸發(fā)器,若定義有多個(gè)AFTER觸發(fā)器,按照它們的建立順序執(zhí)行。
5. 如果使用INSTEAD OF觸發(fā)器,則不會(huì)執(zhí)行原始SQL語(yǔ)句,而是執(zhí)行觸發(fā)器中的SQL語(yǔ)句。
編寫MySQL觸發(fā)器
編寫MySQL觸發(fā)器需要遵循一些規(guī)則:
1. 觸發(fā)器必須滿足MySQL的語(yǔ)法要求。
2. 觸發(fā)器只能與表、視圖等數(shù)據(jù)庫(kù)對(duì)象進(jìn)行綁定。
3. 一個(gè)表只能綁定一個(gè)同種類型的觸發(fā)器。
4. 不能在觸發(fā)器中使用WAL機(jī)制。
5. 不能在觸發(fā)器中使用COMMIT和ROLLBACK語(yǔ)句。