数据库事务隔离

数据库访问时可能发生的问题
1.脏读(dirty read)
      T1正在对一条数据进行更新,但尚未提交,此时T2读取了这条未提交的数据。稍后T1可能撤销了更新,T2读到的就是脏数据。


2.更新丢失(lost update)
      T1、T2同时修改一条数据,假设它们读到的A=16,T1对A减1,并提交,A=15。T2也对A减1,由于T2读到的A为16,因此提交后A依然等于15,这样对A进行了两次减,结果却只减了1,T1的更新被丢失了。

3.
无法重复读(non-repeatable read)
      T1读取了一条数据,并没有结束。此时T2对此条数据进行了更新。而后,T1再次按照同样的条件查询到这条数据时,得到了不同的内容,产生了无法重复读。

4.幻影读(phantom read)
      T1对表进行多次查询,同时T2对表进行插入操作,T1每次返回不同的结果集,
如同发生了幻影。

ANSI SQL92定义了4个事务隔离级别用来解决这些问题
Level0 未提交读(read uncommitted)
      不解决任何问题。

Level1 提交读(read committed)
      确保事务读到的数据都是更新已提交的数据。方法是进行更新的事务对行加锁,在提交前不释放。

Level2 重复读(repeatable read)
      确保事务在反复进行相同条件查询时,每次得到的数据都相同。方法是进行查询的事务对记录加锁,并在查询后不释放,直到事务结束后再释放。

Level3 序列化(serializable)
      最高级别隔离。不允许事务并发,事务必须顺序执行,可避免所有问题。但需要最多的资源。

SQL 事务隔离级别
隔离级别脏读不可重复读幻影读
未提交读(read uncommitted)可发生可发生可发生
提交读(read committed)可避免可发生可发生
重复读(repeatable read)可避免可避免可发生
序列化(serializable)可避免可避免可避免

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值