zoukankan      html  css  js  c++  java
  • Mysql InnoDB事务

    http://www.cnblogs.com/benshan/archive/2013/01/19/2867244.html

    事务的四个特性

    1、原子性(atomicity)原子性是指整个数据库事务是不可分割的工作单位

    2、一致性(consistency)一致性指事务将数据库从一种状态转变为下一种一致的状态。在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。

    3、隔离性(isolation)一个事务的影响在该事务提交之前对其他事务都不可见------这通过锁来实现

    4、持久性(durability)事务一旦提交,其结果就是永久性的


    事务的实现

    隔离性通过Mysql InnoDB锁就可以实现,

    原子性、一致性、持久性通过数据库的redo和undo来完成


    隐式提交的SQL语句

    以下这些SQL语句会产生一个隐式的提交操作,即执行完这些语句后,会有一个隐式的COMMIT操作。

    1、DDL语句:ALTER DATABASE...UPGRADE DATA DIRECTORY NAME、。。。。

    2、用来隐式的修改mysql架构的操作:CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD。

    3、管理语句:ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE 、REPAIR TABLE。


     

    对于事务操作的统计

    QPS:question per second,每秒请求数

    TPS:transaction per second,每秒事务处理的能力

    计算TPS的方法是(com_commit+com_rollback)/time,用这种方法的前提是,所有的事务必须都是显式提交的。


    事务的隔离级别

    SQL标准定义的四个隔离级别为:

    1、READ UNCOMMITED

    2、READ COMMITED

    3、REPEATABLE READ

    4、SERIALIZABLE

    查看当前会话的事务隔离级别

     

    查看全局事务隔离级别

     

    在SERIALIZBLE的事务隔离级别,InnoDB存储引擎会对每个SELECT语句后自动加上LOCK IN SHARE MODE,即给每个读取操作加一个共享锁,因此在这个事务隔离级别下,读占用锁了,一致性的非锁定读不再予以支持,一般不再本地事务中使用SERIALIZBLE的隔离级别,SERIALIZABLE的事务隔离级别主要用于InnoDB存储引擎的分布式事务。

    在READ COMMITED的事务隔离级别下,除了唯一性的约束检查以及外键约束的检查需要Gap Lock,InnoDB存储引擎不会使用Gap Lock的锁算法。


    分布式事务

    通过XA事务可以来支持分布式事务的实现,在使用分布式事务时,InnoDB存储引擎必须使用SERIALIZABLE的隔离级别,查看是否启用了XA事务支持(默认开启)

     

    在默认配置下,mysql数据库总是自动提交的。

  • 相关阅读:
    同一域环境下SQLServer DB Failover故障转移配置详解
    WebAPI项目中使用SwaggerUI
    Failed to initialize the Common Language Runtime
    WCF Throttling 限流的三道闸口
    Entity Framework 乐观并发控制
    MVC3不能正确识别JSON中的Enum枚举值
    编写高质量代码改善C#程序的157个建议读书笔记【11-20】
    如果下次做模板,我就使用Nvelocity
    对于react中的this.setState的理解
    对于react中rredux的理解
  • 原文地址:https://www.cnblogs.com/xiaobaxiing/p/6539716.html
Copyright © 2011-2022 走看看