《mysql必知必會》讀書筆記--觸發器及管理事務處理
觸發器
觸發器是MySQL響應DELETE,INSERT,UPDATE而自動執行的一條MySQL語句,其他語句不支持觸發器。
創建觸發器時,需要4個條件;
唯一的觸發器名
觸發器關聯的表
觸發器應該響應的活動
觸發器何時執行
MySQL中觸發器名在每個表中必須唯一,但是在同一個數據庫中的兩個表可具有相同名字的觸發器。這個條件在其他的DBMS中是不允許的,所以為了統一,最好在同一個數據庫中,觸發器名設置成唯一的。
創建觸發器
CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT‘Product added‘; CREATE TRIGGER--創建一個叫newproduct的新觸發器 AFTER INSERT--此觸發器將在INSERT語句成功後執行 FOR EACH ROW--代碼對每個插入行執行
註意:
只有表才可以支持觸發器,視圖、臨時表都不支持
每個表最多支持6個觸發器。單一的觸發器不能與多個事件或多個表關聯。
如果BEFORE觸發器失敗,MySQL將不執行請求操作。
如果BEFORE觸發器或語句本身失敗,MySQL將不執行AFTER觸發器
刪除觸發器
DROP TRIGGER newproduct;
觸發器不能修改或者覆蓋,如要修改必須先刪除,再創建。
使用觸發器
INSERT觸發器
可以引用一個叫NEW的虛擬表,來訪問插入的行
DELETE觸發器
引用一個叫OLD的虛擬表,來訪問被刪除的行
UPDATE觸發器
書中缺頁未介紹
管理事務處理
MySQL中有好幾種引擎,但是不是每種引擎都支持事務處理
常用的引擎中InnoDB支持事務,MyISAM不支持事務
幾個名詞:
事務transaction
回退rollback
提交commit
保留點savepoint
控制事務管理
ROLLBACK SELECT * FROM ordertotals; START TRANSACTION; DELETE FROM ordertotals; SELECT * FROM ordertotals; ROLLBACK; SELECT * FROM ordertotals;
註意:事務用來管理INSERT、UPDATE和DELETE。不能回退CREATE或者DROP操作
COMMIT START TANSACTION; DELETE FROM orderitems WHERE order_num = 20010; DELETE FROM order WHERE order_num = 20010; COMMIT;
保留點
-- 創建保留點 SAVEPOINT delete1; -- 回滾到保留點 ROLLBACK TO delete1;
保留點再執行ROLLBACK或COMMIT後自動釋放,mysql 5之後可以用RELEASE SAVEPOINT 明確釋放保留點
更改默認的提交行為
SET autocommit=0
註意:autocommit標誌是針對每個連接,而不是服務器;
《mysql必知必會》讀書筆記--觸發器及管理事務處理