MYSQL必知必會讀書筆記 第二十五章 使用觸發器

2021-07-11 19:04:44 字數 1782 閱讀 9564

建立觸發器需要給出4條資訊:

1. 唯一的觸發器名;

2.觸發器關聯的表;

3.觸發器應該響應的活動(d,i,u)

4.觸發器何時執行(處理之前或之後)。

下面乙個簡單的例子

建立觸發器:

create trigger newproduct after insert on products  for each row  select  'product  added';

後面的select語句是插入顯示的功能。

需要注意的是:只要表才支援觸發器,檢視是不支援觸發器的,臨時表也不支援。並且每個表的每個事件只允許乙個觸發器。因此每個表最多支援6個觸發器。單一觸發器不能與多個事件或多個表關聯,所以,如果你需要乙個對insert和update操作執行的觸發器,則應該定義兩個觸發器。

如果before觸發器失敗,則mysql將不執行請求的操作。此外,如果before觸發器或語句本身失敗,mysql將不執行after觸發器(如果有的話)。

刪除觸發器:

drop  trigger newproduct;

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

insert 觸發器

1.在insert觸發器**內,可引用乙個名為new的虛擬表。訪問被插入的行;

2.before  insert觸發器中,new中的值也可以被更新(允許更改被插入的值);

3.對於auto_increment列,new在insert執行之前包含0,在insert執行之後包含新的自動生成值。

create trigger neworder  after insert on  orders  for each row  select  new.order_num;

是before 還是after ?通常,將before用於資料驗證和淨化(目的是保證插入表中的資料確實是需要的資料)

delete觸發器:

1.delete觸發器**內,你可以引用乙個名為old的虛擬表。訪問被刪除的行;

2.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;

使用before delete觸發器的優點(相對於after  delete觸發器來說),如果由於某種原因,訂單不能存檔,delete本身將被放棄。正如所見,觸發器deleteorder觸發器使用了begin和end語句標記觸發器體。這在此例子中並不是必須的,不過使用begin  end塊的好處是觸發器能容納多條sql語句。

update觸發器

1.在update觸發器**中,你可以引用乙個名為old的虛擬表,引用乙個new的虛擬表訪問新更新的值。

2.before update觸發器中,new中的值可能也被更新。

3.old中的值全都是唯讀的,不能更新。

保證州名都是大寫:

create trigger  upatevendor before  update  on  vendors  for each row  set  new.vend_state=upper(new.vend_state);

遺憾的是mysql中觸發器中不支援call語句。這表示不能從觸發器內呼叫儲存過程。

MySQL必知必會讀書筆記二

暫時只更到檢視之前的內容了 後續的東西有機會再補 插入資料 insert into customers cust address,cust city,cust state,cust zip,cust country,cust contact,cust email values pep e 100 m...

mysql必知必會 讀書筆記

一.show命令 1.使用命令列 管理員方式 啟動mysql服務 net start mysql57 mysql57為安裝時取得名字 2.登陸本地mysql資料庫 mysql uroot p 3.顯示已有的資料庫 show databases 4.使用某資料庫 use users 5.先使用4命令 ...

讀書筆記 mysql必知必會 22

檢視是虛擬的表。與包含資料的表不一樣,檢視只包含使用時動態檢索資料的查詢 作為檢視,它不包含表中應該有的任何列或資料,它包含的是乙個sql 查詢 與上面用以正確聯結表的相同的查詢 重用 sql語句。簡化複雜的 sql操作。在編寫查詢後,可以方便地重用它而不必知道它的基本查詢細節。使用表的組成部分而不...