資料庫觸發器

2021-07-26 07:40:29 字數 1597 閱讀 5798

想要某條語句在事件發生時自動執行(某錶發生改動時,自動處理)

除下列三個關鍵字意外的不支援觸發器

建立觸發器時,需要給出四條資訊:

create

trigger newproduct after

insert

on products

foreach

rowselect

'product added';

分析:

create trigger用來建立名為newproduct的新觸發器。觸發器可在乙個操作發生之前或之後,這裡給出了after insert,所以此觸發器將在insert語句成功執行後執行。這個觸發器還指定for each row,因此**對每個插入行執行。文字product added將對每個插入的行顯示一次。

僅支援表

只有表才支援觸發器,檢視不支援(臨時表也不支援)

觸發器按每個表每個事件每次地定義,每個表每個事件每次只允許乙個觸發器。因此,每個表最多支援6個觸發器(每條update、delete、insert)。單一觸發器不能與多個事件或多個表關聯。

drop

trigger newproduct;

觸發器不能更新或覆蓋。為了修改乙個觸發器,必須先刪除它。然後再重新建立。

create

trigger neworder after

insert

on orders

foreach

rowselect new.order_num;

建立乙個名為neworder的觸發器,它按照after insert on orders執行。在插入乙個新訂單到orders表時,mysql生成乙個新訂單號並儲存到order_num中。觸發器從new.order_num取得這個值並返回它。此觸發器必須按after insert執行,因為在before insert語句執行前,新order_num還沒有生成。對於orders每次插入使用這個觸發器總是返回新的訂單號。

為測試這個觸發器,試插入一下新行

insert

into orders(order_date,cust_id)

values(now(),10001);

#輸出order_num

20010

create

trigger deleteorder before

delete

on orders

foreach

rowbegin

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的表)

資料庫觸發器

觸發器是一種特殊型別的儲存過程,它不同於我們前面介紹過的儲存過程。觸發器主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名字而 被直接呼叫。當對某一表進行諸如update insert delete 這些操作時,sql server 就會自動執行觸發器所定義的sql 語句,從而確保對資料...

資料庫觸發器

最近做了個觸發器的例子 create trigger tru user on user for update asif update status begin update user set stopflag 1 from inserted where user.userid inserted.us...

資料庫 觸發器

觸發器的概念 是使用者定義在關係表上的一類有事件驅動的特殊過程。一旦定義,任何對錶的增刪改操作均有伺服器自動啟用相應的觸發器,在dbms核心層進行集中的完整性控制。類似於約束,但比約束更靈活。觸發器的分類 dml觸發器 dml data manipulation language 觸發器是當資料庫伺...