MySQL之觸發器

2021-10-11 18:34:50 字數 2060 閱讀 5301

如何能夠使mysql語句在某些時候自動執行,這就需要利用觸發器。

delete、insert、update語句能夠支援觸發器,其餘語句不能支援觸發器。

建立觸發器時需要給出下面4個資訊

觸發器用create trigger語句建立

例:

create trigger newproduct after insert on products

for each row select 'product added';

分析:create trigger用來建立新的觸發器newproductafter insert表示在insert語句成功執行之後執行,for each row表示對每行插入執行(每插入一行就顯示product added

只用表才能支援觸發器,檢視不支援

每個表每個事件每次只允許乙個觸發器,因此每個表最多支援6個觸發器(每條inasert、update、delete執行前後)。且單個觸發器不能與多個事件或多個表關聯,所以如果需要乙個對insert和update操作執行的觸發器,則應該定義兩個觸發器。

觸發器失敗。如果before觸發器執行失敗,則mysql將不執行請求的操作,也不執行after觸發器(如果有的話)。

輸入下述語句

drop trigger newproduct(觸發器名)
觸發器不能更新和覆蓋。為了修改乙個觸發器,必須先刪除它,後建立。

insert觸發器在insert語句執行之前或之後執行。

下面例子可以獲得新生成值(如插入資料後的主鍵id)的方法

create trigger neworder after insert on orders

for each row select new.order_num;

分析:建立了乙個名為neworder的觸發器,按照after insert on orders執行。插入資料後,mysql生成新的訂單號,觸發器從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語句。

例:

create trigger updatevendor before update on vendors

for each row set new.vend_state = upper(new.vend_state)

分析:上述就是乙個淨化資料的乙個例子,在做更新前觸發器將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...