DELETE觸發器
觸發器(trigger)是SQL server 提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,例如當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用於加強資料的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 資料字典中查到。 SQL3的觸發器是一個能由系統自動執行對資料庫修改的語句。
相關mysql影片教學推薦:《mysql教學》
#觸發器可以查詢其他表,而且可以包含複雜的SQL語句。它們主要用於強制服從複雜的業務規則或要求。例如:您可以根據客戶目前的帳戶狀態,控制是否允許插入新訂單。
DELETE 觸發器在 DELETE 語句執行之前或之後執行。 需要知道以下兩點:
1.在DELETE 觸發器程式碼內,你可以引用一個名為OLD 的虛擬表,存取被刪除的行;
2.OLD 中的值全都是唯讀的,不能更新。下面的範例示範使用 OLD 儲存將要刪除的行到一個檔案表中:
輸入:
create trigger deleteorder before delete on orders for each row begin insert into archive_orders(order_num,order_date,cust_id) values(old.order_num,old.order_date,old.cust_id); end;
分析:在任意訂單被刪除前將執行此觸發器。它使用一條INSERT 語句將OLD 中的值(要被刪除的訂單)保存到一個名為archive_orders 的存檔表中(為實際使用這個例子,你需要用與orders 相同的列建立一個名為archive_orders 的表) 。
使用 BEFORE DELETE 觸發器的優點(相對於 AFTER DELETE 觸發器來說)為,如果由於某種原因,訂單不能存檔, DELETE 本身將被放棄。
多語句觸發器 如所見,觸發器 deleteorder 使用 BEGIN 和END 語句標記觸發器體。這在此例子中並不是必需的,不過也沒有害處。使用 BEGIN END 區塊的好處是觸發器能容納多條SQL語句(在 BEGIN END區塊 中一條挨著一條)。
【相關推薦】
1. mysql免費影片教學
#5. MySQL字元集與校對順序簡介
以上是MySQL delete觸發器(刪除)用法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!