標籤:
/* 觸發器 */ ------------------
觸發程式是與表有關的命名資料庫物件,當該表出現特定事件時,將啟用該對象監聽:記錄的增加、修改、刪除。
-- 建立觸發器
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt
參數:
trigger_time是觸發程式的動作時間。它可以是 before 或 after,以指明觸發程式是在啟用它的語句之前或之後觸發。
trigger_event指明了啟用觸發程式的語句的類型
INSERT:將新行插入表時啟用觸發程式
UPDATE:更改某一行時啟用觸發程式
DELETE:從表中刪除某一行時啟用觸發程式
tbl_name:監聽的表,必須是永久性的表,不能將觸發程式與TEMPORARY表或視圖關聯起來。
trigger_stmt:當觸發程式啟用時執行的語句。執行多個語句,可使用BEGIN...END複合陳述式結構
-- 刪除
DROP TRIGGER [schema_name.]trigger_name可以使用old和new代替舊的和新的資料 更新操作,更新前是old,更新後是new. 刪除操作,只有old. 增加操作,只有new.
-- 注意
1. 對於具有相同觸發程式動作時間和事件的給定表,不能有兩個觸發程式。
-- 字元串連函數
concat(str1[, str2,...])
-- 分支語句
if 條件 then 執行語句elseif 條件 then 執行語句
else 執行語句
end if;
-- 修改最外層語句結束符
delimiter 自訂結束符號 SQL語句自訂結束符號delimiter ; -- 修改回原來的分號
-- 語句塊包裹
begin 語句塊
end
-- 特殊的執行
1. 只要添加記錄,就會觸發程式。
2. Insert into on duplicate key update 文法會觸發: 如果沒有重複記錄,會觸發 before insert, after insert; 如果有重複記錄並更新,會觸發 before insert, before update, after update; 如果有重複記錄但是沒有發生更新,則觸發 before insert, before update
3. Replace 文法 如果有記錄,則執行 before insert, before delete, after delete, after insert
(未完待續)
(Shocker 來源:http://www.cnblogs.com/shockerli/p/1000-plus-line-mysql-notes.html)
一千行MySQL學習筆記(八)