一、什麼是觸發器:
1、觸發器是由事件來觸發某個操作,這些事件包括insert、update和delete語句。
2、觸發器實際是個特殊的存儲過程,如果定義了觸發程式,當資料庫執行這些語句的時候就會激發觸發器執行相應的操作;
觸發程式是與表有關的命名資料庫對象,當表上出現特定事件時,将激活該對象。
3、觸發器可以查詢其他表,而且可以包含複雜的SQL語句。主要用于滿足複雜的業務規則或要求。
二、建立觸發器:
1.文法:
create trigger trigger_name trigger_time trigger_event on table_name for each row
trigger_statement;
(1)trigger_name:觸發器名稱
(2)trigger_time:觸發時機,before或after
before:先完成觸發,再增删改,觸發的語句先用于監視的增删改,我們就有機會判斷、修改即将發生的操作。
after:先完成資料的增删改,再觸發,觸發的語句晚于監視的增删改操作,無法影響前面的增删改動作。
(3)trigger_event:觸發事件,包括insert、update、delete
(4)table_name:表名,即在哪張表上建立觸發器
(5)trigger_statement:觸發器的程式體,對于多行語句,可以使用begin和end作為開始和結束。
在MySQL觸發器中的SQL語句可以關聯表中的任意列。但不能直接使用列的名稱去标志,那會使系統混淆,因為激活觸發器的語句可能已經修改、删除或添加了新的列名,而列的舊名同時存在。
是以必須用這樣的文法來标志:“NEW.column_name”或者“OLD.column_name”。
NEW.column_name用來引用新行的一列;
OLD.column_name用來引用更新或删除它之前的已有行的一列。
對于INSERT語句,隻有NEW是合法的;
對于DELETE語句,隻有OLD才合法;而UPDATE語句可以與NEW或OLD同時使用。
注意事項:
不能在一個表内建立兩個(包含兩個)以上trigger_time和 trigger_event相同的觸發器。