mysql必知必會--學習筆記(19)-- 觸發器

1、觸發器  

不能直接返回查詢結果,意味着不能很實用select語句直接返回查詢結果,可以select into 變量名存入變量中。

CREATE TRIGGER newproduct 
AFTER INSERT ON products
FOR EACH ROW
select 'abc';

會報錯。表明使用錯誤。

是MySQL響應以下任意語句而自動執行的一條MySQL語句(或位於 BEGIN 和 END 語句之間的一組語句):

 DELETE ;
 INSERT ;

 UPDATE 。

2、保持每個數據庫的觸發器名唯一

3、創建觸發器

CREATE TRIGGER newproduct 
AFTER INSERT ON products
FOR EACH ROW
BEGIN
DECLARE str varchar(20);
SELECT 'Product added' INTO str;
INSERT INTO message(mess)
VALUES('insert succeed');
END;

4、僅支持表

 只有表才支持觸發器,視圖不支持(臨時表也不支持)。

5、刪除觸發器

DROP TRIGGER newproduct;

6、INSERT觸發器
INSERT 觸發器在 INSERT 語句執行之前或之後執行。需要知道以下幾
點:
 在 INSERT 觸發器代碼內,可引用一個名爲 NEW 的虛擬表,訪問被
插入的行;
 在 BEFORE INSERT 觸發器中, NEW 中的值也可以被更新(允許更改
被插入的值);
 對於 AUTO_INCREMENT 列, NEW 在 INSERT 執行之前包含 0 ,在 INSERT

執行之後包含新的自動生成值。

7、DELETE觸發器
DELETE 觸發器在 DELETE 語句執行之前或之後執行。需要知道以下兩
點:
 在 DELETE 觸發器代碼內,你可以引用一個名爲 OLD 的虛擬表,訪
問被刪除的行;

 OLD 中的值全都是隻讀的,不能更新。

8、UPDATE觸發器
UPDATE 觸發器在 UPDATE 語句執行之前或之後執行。需要知道以下幾
點:
 在 UPDATE 觸發器代碼中,你可以引用一個名爲 OLD 的虛擬表訪問
以前( UPDATE 語句前)的值,引用一個名爲 NEW 的虛擬表訪問新
更新的值;
 在 BEFORE UPDATE 觸發器中, NEW 中的值可能也被更新(允許更改
將要用於 UPDATE 語句中的值);

 OLD 中的值全都是隻讀的,不能更新。

9、遺憾的是,MySQL觸發器中不支持 CALL 語句。這表示不能從觸發
器內調用存儲過程。所需的存儲過程代碼需要複製到觸發器內

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章