剛剛弄懂了MYSQL的創建觸發程序。
語法:CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
文字說明第一次看的時候不是很明白,但是最後面的看一下例子就差不多了!
觸發程序是與表有關的命名數據庫對象,當表上出現特定事件時,將激活該對象。
觸發程序與命名為tbl_name的表相關。tbl_name必須引用永久性表。不能將觸發程序與TEMPORARY表或視圖關聯起來。
trigger_time是觸發程序的動作時間。它可以是BEFORE或AFTER,以指明觸發程序是在激活它的語句之前或之後觸發。
trigger_event指明了激活觸發程序的語句的類型。trigger_event可以是下述值之一:
· INSERT:將新行插入表時激活觸發程序,例如,通過INSERT、LOAD DATA和REPLACE語句。
· UPDATE:更改某一行時激活觸發程序,例如,通過UPDATE語句。
· DELETE:從表中刪除某一行時激活觸發程序,例如,通過DELETE和REPLACE語句。
請注意,trigger_event與以表操作方式激活觸發程序的SQL語句並不很類似,這點很重要。例如,關於INSERT的BEFORE觸發程序不僅能被INSERT語句激活,也能被LOAD DATA語句激活。
可能會造成混淆的例子之一是INSERT INTO .. ON DUPLICATE UPDATE ...語法:BEFORE INSERT觸發程序對於每一行將激活,後跟AFTER INSERT觸發程序,或BEFORE UPDATE和AFTER UPDATE觸發程序,具體情況取決於行上是否有重復鍵。
對於具有相同觸發程序動作時間和事件的給定表,不能有兩個觸發程序。例如,對於某一表,不能有兩個BEFORE UPDATE觸發程序。但可以有1個BEFORE UPDATE觸發程序和1個BEFORE INSERT觸發程序,或1個BEFORE UPDATE觸發程序和1個AFTER UPDATE觸發程序。
trigger_stmt是當觸發程序激活時執行的語句。如果你打算執行多個語句,可使用BEGIN ... END復合語句結構。這樣,就能使用存儲子程序中允許的相同語句。
使用別名OLD和NEW,能夠引用與觸發程序相關的表中的列。OLD.col_name在更新或刪除它之前,引用已有行中的1列。NEW.col_name在更新它之後引用將要插入的新行的1列或已有行的1列。
激活觸發程序時,對於觸發程序引用的所有OLD和NEW列,需要具有SELECT權限,對於作為SET賦值目標的所有NEW列,需要具有UPDATE權限。
注釋:目前,觸發程序不會被級聯的 外鍵動作激活。該限制將會被盡早放寬。
CREATE TRIGGER語句需要SUPER權限。
示例:
CREATE TRIGGER update_blogs AFTER INSERT ON blogs FOR EACH ROW
UPDATE blogcategory SET amount = amount + 1 WHERE cid = NEW.categoryid;
該語句創建了一個名為update_blogs的觸發程序,這個觸發程序在blogs表發生INSERT、LOAD DATA和REPLACE語句時執行“UPDATE blogcategory SET amount = amount + 1 WHERE cid = NEW.categoryid;”