zoukankan      html  css  js  c++  java
  • 高性能MySQL之事务(3)

    高性能MySQL事务:

    概念:事务是一组原子性的sql查询,一个独立的工作单元。事务内的语句要么全部执行成功,要么全部执行失败。

    银行转账是解释事务重要性的一个经典例子。比如:客户A要向客户B转账200元,需要三个步骤:

    1,检查A账户是否够200元。

    2,A账户减200元。

    3,B账户增加200元。

    这三个步骤必须打包在一个事务中,任何一个步骤失败,则必须回滚所有的步骤。

    空谈事务的概念是不够的,事务还得必须具备ACID四个标准特征。

     (1)原子性(atomicity)

              一个事务被视为一个最小的工作单元,整个事务中的操作要么全都执行成功,要么全部或失败回滚。这就是事务的原子性。

    (2)一致性(consistency)

             事务执行前后,数据库中的数据是从一个一致状态转换到另外一个一致状态。

    (3)隔离性(isolation):

            隔离性是当多个客户同时访问统一数据库时,比如访问同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发的事务之间要相互隔离。()()

    (4)持久性(durability)

             持久性是指一个事务一旦提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失事务提交的数据。


     下面介绍事务的四种隔离级别:

    1)未提交读(READ UNCOMMITTED)

        事务中的修改,即使没有提交,对其他事务也是可见的。事务可以读取未提交的数据,这样也被称为赃读。

    2)提交读(READ COMMITTED)

         大多数的数据库系统的默认隔离级别是未提交读(MySQL不是)。事务所做出的修改,提交之后对齐他事务才是可见的。这个级别可能导致一个事务多次读取同一数据,得到不同的结果,是因为在第一次和第二次读取之间其他事务修改了这一数,导致第二次读取的结果和第一次读取的结果不一致。所以这个级别有时候也叫做不可重复读。

    3)可重复读(REPEATABLE READ)

         该事务解决了赃读和不可重复读的问题,但是不能解决另外一个幻读的问题。所谓幻读指的是,当某个事务在读取某一范围的数据时,另外一个事务又在该范围插入了新的记录,当之前的事务再次读取这一范围的数据是,会产生幻行。

         InnoDB和XtraDB存储引擎通过多版本并发控制解决了幻读的问题。

    4)可串行化(SERIALIZABLE)

    可串行化是最高的隔离级别。他通过强制事务串行执行,避免了幻读的问题。简单来说,可串行化会在读取的每一行数据上加锁,所以可能导致大量的超时和锁争用的问题,实际应用中也很少用到这个隔离级别。


     
  • 相关阅读:
    angularjs中的指令
    git笔记
    webpack.config.js
    webpack开发react常用插件和依赖
    angularjs中的分页指令
    angularjs中的排序和过滤
    react学习
    gulp学习
    Javascript 判断变量类型的陷阱 与 正确的处理方式
    Fn.bind.apply() 解决 new 操作符不能用与 apply 或 call 同时使用
  • 原文地址:https://www.cnblogs.com/tongluo/p/5851805.html
Copyright © 2011-2022 走看看