14 事務控制和鎖定語句

MySQL支持的鎖定 :
 
    a.表級鎖定 : MyISAM 和 MEMORY
    b.頁級鎖定 : BDB
    c.行級鎖定 : InnoDB
 
    默認狀況下,表鎖和行鎖都是自動得到的,不須要額外命令.
    有些狀況下,用戶須要明確地進行鎖表或者進行事務的控制,確保事務的完整性.
 
 
    1.LOCK TABLES 和 UNLOCK TABLES
 
        LOCK TABLES 能夠用於當前線程的表.若是表被其餘線程鎖定,當前線程會等待.
        UNLOCK TBALES 能夠釋放當前線程得到的任何鎖定.當線程執行另外一個LOCK TABLES 或與服務器的鏈接關閉時,當前線程以前鎖定的表被隱含的解鎖.
    
        LOCK TABLES
            tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}
            [,tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY WRITE}]
            ...
 
        UNLOCK TABLES
 
 
    2.事務控制
        MySQL經過 SET AUTOCOMMIT , START TRANSACTION , COMMIT , ROLLBACK等語句支持本地事務.
 
        START TRANSACTION | BEGIN [WORK]
        COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
        ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
        SET AUTOCOMMIT = {0|1}
 
        
        默認狀況,MySQL是 AUTOCOMMIT , 
        若是須要經過明確的 COMMIT 和 ROLLBACK來提交/回滾 事務, 那麼須要經過明確的事務控制命令來開始事務(不一樣於ORACLE).
        START TRANSACTION 或 BEGIN 語句來開始一項新的事務.
        COMMIT , ROLLBACK 用來提交或回滾事務.
        CHAIN 和 RELEASE子句 分別用來定義在事務提交或者回滾以後的操做.
            CHAIN 會當即啓動一個新事務,而且和剛纔的事務具備相同的隔離級別.
            RELEASE 則會斷開和客戶端的鏈接.
        SET AUTOCOMMIT 能夠修改當前鏈接的提交方式. 該值爲0時 , 後面全部的事務都須要經過明確的命令進行提交/回滾.
 
        若是隻是對某些語句須要進行事務控制,則使用START TRANSACTION 語句開始一個事務比較方便,這樣事務結束後能夠自動回到自動提交的方式;
        若是但願全部的事務都不是自動提交的,那麼經過修改AUTOCOMMIT來控制事務比較方便,這樣不用在每一個事務開始的時候再執行 START TRANSACTION 語句.
 
        在鎖表期間,若是使用START TRANSACTION 開始一個新的事務,會形成一個隱含的UNLOCK TABLES 被執行.
 
        另外,對LOCK 語句顯示加的表鎖 , 用ROLLBACK不起做用.
 
        在同一事務中,最好不使用不一樣引擎的表,不然 ROLLBACK時,須要對非事務類型的表進行特別處理,由於 COMMIT/ROLLBACk 只能對事務類型的表進行提交和回滾.
 
        與Oracle相同,全部的DDL語句是不能回滾,而且部分的DDL語句會形成隱式的提交.
 
        在事務中能夠經過定義SAVEPOINT 指定ROLLBACK事務的一部分,但不能指定COMMIT事務的一部分.
        在複雜的應用中能夠定義多個不一樣的SAVEPOINT ,知足不一樣的條件時,ROLLBACK 不一樣的SAVEPOINT .
        須要注意,定義了相同名字的SAVEPOINT,後面定義的會覆蓋以前定義的.
        對於再也不使用的SAVEPOINT , 能夠經過RELEASE SAVEPOINT命令刪除SAVEPOINT , 以後不能再執行 ROLLBACK TO SAVEPOINT 命令.
 
 
    分佈式事務的使用
        在MySQL中,使用分佈式的應用程序涉及一個或多個資源管理器和一個事務管理器.
            資源管理器(RM) : 用於提供通向事務資源的途徑.數據庫服務器就是一種資源管理器.該管理器必須能夠COMMIT/ROLLBACK由RM管理的事務.
            事務管理器(TM) : 用於協調做爲一個分佈式事務一部分的事務.TM與管理每一個事務的RMs進行通信.一個分佈式事務中各個單個事務軍事分佈式事務的"分支事務".分佈式事務和個分支經過一種命名方法進行標識.
 
 
        todooooooooooo  ...  
相關文章
相關標籤/搜索