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  ...  
相关文章
相关标签/搜索