1. 程式人生 > >《mysql必知必會》讀書筆記--觸發器及管理事務處理

《mysql必知必會》讀書筆記--觸發器及管理事務處理

sql drop 是不是 回退 blog mysql語句 update inno eat

觸發器

  觸發器是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必知必會》讀書筆記--觸發器及管理事務處理