語(yǔ)法:CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
文字說(shuō)明第一次看的時(shí)候不是很明白,但是最后面的看一下例子就差不多了!
觸發(fā)程序是與表有關(guān)的命名數(shù)據(jù)庫(kù)對(duì)象,當(dāng)表上出現(xiàn)特定事件時(shí),將激活該對(duì)象。
觸發(fā)程序與命名為tbl_name的表相關(guān)。tbl_name必須引用永久性表。不能將觸發(fā)程序與TEMPORARY表或視圖關(guān)聯(lián)起來(lái)。
trigger_time是觸發(fā)程序的動(dòng)作時(shí)間。它可以是BEFORE或AFTER,以指明觸發(fā)程序是在激活它的語(yǔ)句之前或之后觸發(fā)。
trigger_event指明了激活觸發(fā)程序的語(yǔ)句的類(lèi)型。trigger_event可以是下述值之一:
? INSERT:將新行插入表時(shí)激活觸發(fā)程序,例如,通過(guò)INSERT、LOAD DATA和REPLACE語(yǔ)句。
? UPDATE:更改某一行時(shí)激活觸發(fā)程序,例如,通過(guò)UPDATE語(yǔ)句。
? DELETE:從表中刪除某一行時(shí)激活觸發(fā)程序,例如,通過(guò)DELETE和REPLACE語(yǔ)句。
請(qǐng)注意,trigger_event與以表操作方式激活觸發(fā)程序的SQL語(yǔ)句并不很類(lèi)似,這點(diǎn)很重要。例如,關(guān)于INSERT的BEFORE觸發(fā)程序不僅能被INSERT語(yǔ)句激活,也能被LOAD DATA語(yǔ)句激活。
可能會(huì)造成混淆的例子之一是INSERT INTO .. ON DUPLICATE UPDATE ...語(yǔ)法:BEFORE INSERT觸發(fā)程序?qū)τ诿恳恍袑⒓せ睿蟾鶤FTER INSERT觸發(fā)程序,或BEFORE UPDATE和AFTER UPDATE觸發(fā)程序,具體情況取決于行上是否有重復(fù)鍵。
對(duì)于具有相同觸發(fā)程序動(dòng)作時(shí)間和事件的給定表,不能有兩個(gè)觸發(fā)程序。例如,對(duì)于某一表,不能有兩個(gè)BEFORE UPDATE觸發(fā)程序。但可以有1個(gè)BEFORE UPDATE觸發(fā)程序和1個(gè)BEFORE INSERT觸發(fā)程序,或1個(gè)BEFORE UPDATE觸發(fā)程序和1個(gè)AFTER UPDATE觸發(fā)程序。
trigger_stmt是當(dāng)觸發(fā)程序激活時(shí)執(zhí)行的語(yǔ)句。如果你打算執(zhí)行多個(gè)語(yǔ)句,可使用BEGIN ... END復(fù)合語(yǔ)句結(jié)構(gòu)。這樣,就能使用存儲(chǔ)子程序中允許的相同語(yǔ)句。
使用別名OLD和NEW,能夠引用與觸發(fā)程序相關(guān)的表中的列。OLD.col_name在更新或刪除它之前,引用已有行中的1列。NEW.col_name在更新它之后引用將要插入的新行的1列或已有行的1列。
激活觸發(fā)程序時(shí),對(duì)于觸發(fā)程序引用的所有OLD和NEW列,需要具有SELECT權(quán)限,對(duì)于作為SET賦值目標(biāo)的所有NEW列,需要具有UPDATE權(quán)限。
注釋?zhuān)耗壳埃|發(fā)程序不會(huì)被級(jí)聯(lián)的 外鍵動(dòng)作激活。該限制將會(huì)被盡早放寬。
CREATE TRIGGER語(yǔ)句需要SUPER權(quán)限。
示例:
CREATE TRIGGER update_blogs AFTER INSERT ON blogs FOR EACH ROW
UPDATE blogcategory SET amount = amount + 1 WHERE cid = NEW.categoryid;
該語(yǔ)句創(chuàng)建了一個(gè)名為update_blogs的觸發(fā)程序,這個(gè)觸發(fā)程序在blogs表發(fā)生INSERT、LOAD DATA和REPLACE語(yǔ)句時(shí)執(zhí)行“UPDATE blogcategory SET amount = amount + 1 WHERE cid = NEW.categoryid;”
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com