觸發器是與表有關的資料庫對象,觸發器只能是針對創建的永久表,而不能是臨時表。 1.1 創建觸發器 trigger_time:是觸發器的觸發時間,可以是 before或after, before是檢查約束前觸發,而after是檢查約束後觸發。 trigger_event:是觸發器的觸發事件,可以是 i ...
觸發器是與表有關的資料庫對象,觸發器只能是針對創建的永久表,而不能是臨時表。
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)不能在觸發器中使用以顯式或隱式方式開始或結束事務的語句。
編寫過於複雜的觸發器或者增加過多的觸發器對記錄的插入、更新、刪除操作肯定會有比較嚴重的影響。不要將應用的處理邏輯過多的依賴於觸發器來處理。