2007-12-27, 03:28 PM
|
#1
|
管理員
|
06. Triggers
Triggers
使用Triggers的好處:forum$slime&com(tw- 可以檢驗即將新增、修改或刪除的row values。
- 可以改變即將新增、修改的row values,因此可做為data filter。
- 可以改變INSERT、DELETE、UPDATE的預設行為,例如可以將任何temporal column的預設值設定為current time(本來只有TIMESTAMP data type才有這功能)。
TRIGGER的類別:forum$slime&com(tw
一個 table可以有多個 trigger,但同一種類型的 trigger只能有一個。
建立TRIGGER的語法:forum$slime&com(twCREATE TRIGGER trigger_name
{BEFORE | AFTER}
{INSERT | DELETE | UPDATE}
ON table_name
FOR EACH ROW
trigger_statement;
註:其中 "FOR EACH ROW" 是指每個被INSERT、DELETE或UPDATE的row,而不是指目前table中所包含的所有的row。
範例:forum$slime&com(tw
DELIMITER //
CREATE TRIGGER slime_bu
BEFORE UPDATE
ON slime
FOR EACH ROW
BEGIN
SET @var_name = OLD.name;
END;
//
註:當TRIGGER執行完後,user varibles(@var_name)即會被設定,可以使用SELECT @var_name來查看其內容。
TRIGGER的限制:forum$slime&com(tw- 無法START或COMMIT TRANSACTION。
- 無法針對TEMPERARY table或VIEW建立TRIGGER。
- 當MySQL Server啟用Binary Log時,會有與Stored Routines同樣的限制。
Referring to OLD and NEW Column Values:forum$slime&com(tw
刪除TRIGGER:- 使用DROP TRIGGER db_name.trigger_name明確的刪除TRIGGER。
- 刪除TRIGGER所依附的table,則會連帶刪除TRIGGER。
- 刪除TRIGGER所依附的table所屬的database,也會連帶刪除TRIGGER。
使用TRIGGER所需要的權限:forum$slime&com(tw
參考資料: www^slime^com^tw
Paul Dubois, Stefan Hinz, Carsten Pedersen(2005), “MySQL 5.0 Certification Study Guide.”
|
|
|
送花文章: 8870,
收花文章: 2195 篇, 收花: 5820 次
|