数据库中的事务隔离等级 Transaction Isolation Level

数据库中的事务隔离等级

事务隔离等级用于决定一个事务和其他事务中发生地数据修改的隔离程度。

这个概念属于数据库事务的ACID属性。ACID为原子性、一致性、隔离性和持久性。(Atomicity, Consistency, Isolation, Durability)

错读

SQL92标准中定义了三种错读的场景。

事务1(Transaction 1/T1)读取事务2(Transaction 2/T2)有可能已经改变的数据时:

  • 当读取一个已被修改但没有提交的数据时,发生脏读

    T2修改了一行数据但未提交时,T1读取了这行数据,如果T2实施了回滚,则T1读了一个从未存在过的数据。

  • 当一个数据被读取两次且值发生变化时,发生不可重复读

    T1读取一行数据后,T2修改并提交这行数据,接着T1再次尝试读取数据,T1有可能取到一个发生改变或被删除的数据

  • 在一个事务中,执行了两次相同的查询语句,返回的行数不同时,发生幻读

    T1读取到数行符合条件的数据,T2添加或删除了这类数据后,T1再次查询时读取到了不同行数的数据

隔离等级

共有四种隔离等级:读取未提交,读取已提交,可重读以及序列化读。他们由脏读、不可重复读、幻读定义而来。

  • 读取未提交(Read uncommitted):所有读取都可能发生
  • 读取已提交(Read committed):不可重复读和幻读可能发生
  • 可重读(Repeatable read):幻读可能发生
  • 序列化读(Serialize read):所有错读都不会发生

数据库管理系统的默认隔离等级

  • 可重读:MySQL
  • 读取已提交:PostgreSQL,Oracle,SQL Server
  • 读取未提交:MongoDB
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值