1. 程式人生 > >mysql 開發基礎系列19 觸發器

mysql 開發基礎系列19 觸發器

mysq begin 程序 數據庫對象 語句 限制 lec clas img

  觸發器是與表有關的數據庫對象,觸發器只能是針對創建的永久表,而不能是臨時表。

1.1 創建觸發器

 -- 語法:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt

  trigger_time:是觸發器的觸發時間,可以是 before或after, before是檢查約束前觸發,而after是檢查約束後觸發。
  trigger_event:是觸發器的觸發事件,可以是 insert,update,delete。
  同一個表相同的觸發時間的相同觸發事件,只能定義一個觸發器。使用別名old和new 來引用觸發器中發生變化的記錄內容。

--  先查看city_memory數據(觸發前查看表數據)
SELECT * FROM city_memory;

技術分享圖片

-- 創建city表的insert 觸發器 使用AFTER觸發時間
DELIMITER $$
CREATE TRIGGER  tri_city
 AFTER INSERT ON city FOR EACH ROW BEGIN
INSERT INTO city_memory (country_id, cityname, Citycode)
VALUES (new.country_id, new.cityname, new.Citycode);     
END;
$$
DELIMITER ;

-- 插入city表數據,觸發city表插入觸發器 INSERT INTO city(country_id, cityname, Citycode) VALUES(2,中國觸發,001觸發);
-- 再次查看SELECT * FROM city_memory;

技術分享圖片

  下面是city表

技術分享圖片

2. 查看觸發器

-- 使用information_schema.triggers來查看
SELECT * FROM information_schema.triggers WHERE trigger_name = tri_city

技術分享圖片

3. 刪除觸發器

DROP TRIGGER tri_city;

總結:觸發器的限制:

(1)觸發程序不能調用將數據返回客戶端的存儲程序。

(2)不能在觸發器中使用以顯式或隱式方式開始或結束事務的語句。

編寫過於復雜的觸發器或者增加過多的觸發器對記錄的插入、更新、刪除操作肯定會有比較嚴重的影響。不要將應用的處理邏輯過多的依賴於觸發器來處理。

mysql 開發基礎系列19 觸發器