数据库事务隔离级别

事务是数据库的执行单位。事务具有ACID属性。原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

  • 原子性:即事务中的一组操作,要么全执行,要么全部不执行

  • 一致性:事务前数据是一致,事务后数据也是保持一致的

  • 隔离性:多个并发事务执行时,要和事务串行执行的结果是一样的

  • 持久性:数据库数据是持久化的,在数据库关闭或故障是可以恢复的

数据库隔离级别:

  • 读未提交(read uncommitted): 写事务阻止其他写事务,不阻止其他读事务。会造成脏读:在一个写事务未提交之前读数据,读到的是脏数据。解决:read committed

  • 读已提交(read committed): 写事务阻止其他读写事务,读事务不阻止其他事务。会造成不可重复读:在一个写事务之前读一次数据,和在写事务提交之后再次读取的值不一致。解决:repeatable read

  • 可重复读(repeatable read): 读事务阻止其他写事务。会造成幻读:因为读事务只能阻止update和delete操作,不能阻止insert操作。所以会导致在insert前后读取不一致的数据量。解决:Serializable

  • 串行化(Serializable):事务一个一个执行。

目前大部分的数据库默认隔离级别是:read committed,MySQL的默认隔离级别就是Repeatable read。 用户可以根据应用的具体事务性来确定不同的隔离级别。

选择不同的隔离级别要在事务安全和数据库读写性能之间平衡。考虑应用的实际情况,选择适当的事务级别。

原文地址:https://www.cnblogs.com/WeaRang/p/6112452.html