如何能夠使mysql語句在某些時候自動執行,這就需要利用觸發器。
delete、insert、update
語句能夠支援觸發器,其餘語句不能支援觸發器。
建立觸發器時需要給出下面4個資訊
觸發器用create trigger
語句建立
例:
分析:create trigger newproduct after insert on products
for each row select 'product added';
create trigger
用來建立新的觸發器newproduct
,after insert
表示在insert
語句成功執行之後執行,for each row
表示對每行插入執行(每插入一行就顯示product added
)
只用表才能支援觸發器,檢視不支援每個表每個事件每次只允許乙個觸發器,因此每個表最多支援6個觸發器(每條inasert、update、delete執行前後)。且單個觸發器不能與多個事件或多個表關聯,所以如果需要乙個對insert和update操作執行的觸發器,則應該定義兩個觸發器。
觸發器失敗。如果before觸發器執行失敗,則mysql將不執行請求的操作,也不執行after觸發器(如果有的話)。輸入下述語句
drop trigger newproduct(觸發器名)
觸發器不能更新和覆蓋。為了修改乙個觸發器,必須先刪除它,後建立。insert觸發器在insert語句執行之前或之後執行。
下面例子可以獲得新生成值(如插入資料後的主鍵id)的方法
分析:建立了乙個名為neworder的觸發器,按照after insert on orders執行。插入資料後,mysql生成新的訂單號,觸發器從create trigger neworder after insert on orders
for each row select new.order_num;
new.order_num
取得。獲取新的訂單號(order_num)必須在插入資料之後獲取,所以使用after
。
檢驗:
螢幕顯示新插入訂單自動生成的訂單號。insert into orders(order_date, cust_id)
values(now(), 1002)
通常before使用者資料的驗證和淨化(保證輸入的是想要的)例:
分析:在任意訂單刪除前執行觸發器。將要刪除的資料插入到create trigger deleteorder before delete on orders
for each row
begin
insert into archive_order(order_num,order_date,cust_id)
values(old.order_num, old.order_date, old.cust_id)
end;
archive_order
中去。使用before delete相對於after delete的優點是,如果訂單不能存檔,delete語句將不會執行,保證資料丟失。
使用begin和end是不必須的,優點是可以容納多條sql語句。例:
分析:上述就是乙個淨化資料的乙個例子,在做更新前觸發器將state轉化成大寫。create trigger updatevendor before update on vendors
for each row set new.vend_state = upper(new.vend_state)
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...