觸發器是自mysql5.0開始支援的一種過程式資料庫物件。
具體而言,觸發器就是mysql響應insert、update、delete語句而自動執行的一條mysql語句(或位於begin和end語句之間的一組mysql語句)。
需要注意的是觸發器只對增、刪、改語句響應,其他mysql語句是不支援觸發器的。
在資料庫mysql_test的表customers中建立乙個觸發器customers_insert_trigger,用於每次向表customers中插入一行資料時,將使用者變數str的值設定為」one customer added!」。
create
trigger mysql_test.customers_insert_trigger
after
insert
on mysql_test.customers --觸發時間可以after也可before
foreach
rowset @str='one customers added!';
--for each row的意思是每一行執行都啟用觸發器
建立完畢後,可以插入一條資料測試一下
insert mysql_test.customers values(null,'萬華','f','長沙市','芙蓉區');
最後,在命令列輸入下面sql語句驗證觸發器
select @str;
drop
trigger
ifexists mysql_test.customers_insert_trigger;
注意:當刪除乙個表的同時,也會自動地刪除該錶上的觸發器。另外,觸發器不能更新或覆蓋,如果要修改觸發器,必須先刪除它,再重新建立。
在insert觸發器**內,可引用乙個名為new(不區分大小寫)的虛擬表,來訪問新插入的行,即使是before insert觸發器也允許更改被插入的值(只要有相應的許可權)。
如插入一條資料時,將使用者變數str的值設定為新插入客戶的cust_id號:
create
trigger mysql_test.customers_insert_trigger after
insert
on mysql_test.customers for
each
rowset @str=new.cust_id;
在delete觸發器**內,可以引用乙個名為old(不區分大小寫)的虛擬表,來訪問被刪除的行。
在update觸發器的**內,可以引用new虛擬表,也可以引用old虛擬表,其中要注意的是old中的值全部是唯讀的,不能被更新。
如每次更新表customers時,將該表中cust_address列的值設定為原資料中cust_contact列的值。
create
trigger mysql_test.customers_update_trigger before
update
on mysql_test.customers for
each
rowset new cust_address=old.cust_contact;
更新一條資料 ,測試一下
update mysql_test.customers set cust_address='武漢市'
where cust_name='張三';
最後,在命令列輸入以下sql語句,會發現「張三」的cust_address的值並非「武漢市」,而是被觸發器更新為原表中cust_contact列對應的值。
觸發器的執行是自動的
應該多用觸發器來保證資料的一致性,完整性和正確性。
觸發器不支援call語句,所以不能直接儲存過程,只有手工地將所需的儲存過程**複製到觸發器內。
mysql之觸發器詳解 MySQL之觸發器詳解
觸發器 trigger 監事某種情況,並出發某種操作。觸發器建立語法四要素 1 監視地點 table 2 監視事件 insert update delete 3 觸發時間 after before 4 觸發事件 insert update delete create trigger triggern...
MySQL之觸發器
觸發器是個特殊的儲存過程 當乙個預定義的事件發生的時候,被mysql自動呼叫 1 建立只有乙個執行語句的觸發器 create trigger trigger name trigger time trigger event on tb1 name for each row trigger stmttr...
MySQL之觸發器
觸發器 1.建立觸發器 r型別 insert update delete 格式 create trigger 觸發器名 觸發時間 觸發事件 on 表 from each now sql語句 新增一條資訊,顯示提示資訊 delimiter create trigger ct student after...