美文网首页
事务特性 ACID 隔离级别

事务特性 ACID 隔离级别

作者: MaTae | 来源:发表于2020-03-26 11:53 被阅读0次

    ACID 事务特性

    原子性:要么都成功,要么都失败。失败不影响数据库。

    一致性:应用层系统从一种正确的状态,在事务成功后到另一种正确的状态。数据库状态一致,应用逻辑一致。如转账前后两个账户总金额一致。

    隔离性:多个事务同时执行,相互之间不影响。

    持久性:事务提交对数据库的影响是永久的。

    隔离级别:

    读未提交(Read Uncommitted):写的时候禁止其他事务写

    读已提交(Read Committed):写的时候禁止其他事务读写。

    可重复读取(Repeatable Read):读的时候禁止其他事务写,写的时候其他事务禁止读写。

    序列化(Serializable):事务只能一个接一个地执行。

    异常情况

    一)脏读:就是A事务在读取数据时,B事务对同一个数据修改了,但B未提交,A再读取时,读到了B修改后的数据,但是B事务提交失败,回滚,A后读到的数据就是B修改后的脏数据,此为脏读。

    二)不可重复读:就是A事务读取数据,B事务改了这个数据,也提交成功了,A再读取就是B修改后的数据,再也不能重复读到最开始的那个数据值了,此为不可重复读

    三)幻读:可重复读就是A事务读取数据,B事务改了这个数据(update),也提交成功了,A再读这个数据,SQL机制强行让A仍然读之前读到的数据值,这就是可重复读,这种机制对Insert操作无效,A事务在可重复读的机制下,读取数据,B事务insert一条数据,提交成功,A再读这个数据,会显示B插入的数据,此为幻读。

    隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

    默认隔离级别

    大多数的数据库默认隔离级别为 Read Commited,比如 SqlServer、Oracle

    少数数据库默认隔离级别为:Repeatable Read 比如: MySQL InnoDB

    相关文章

      网友评论

          本文标题:事务特性 ACID 隔离级别

          本文链接:https://www.haomeiwen.com/subject/khgquhtx.html