oracle mysql事物隔离级别_mysql事务隔离级别

断断续续研究mysql数据库的隔离级别,理解起来比较抽象,来回看了很多次才整理了如下总结。

先解释3个名词。

脏读:

如果事务1修改了数据,事务2读取了数据,但是由于某种原因回滚了事务1,事务2读到的数据就变为脏数据。

(简单理解为只要发生回滚动作的情况下产生的数据变化)

幻读:

比如事务1根据sql语句中的where条件获取了N条数据,事务1还未结束,事务2新增了符合where条件的X条数据,事务1再次执行sql就发现多出来一些数据。

(简单理解为符合条件索引多出来的数据变化)

不可重复读:

比如事务1获取了一条数据,事务2修改了这条数据,事务1再获取这条数据,发现变了。

(简单理解为没有发生回滚的情况下产生的数据变化)

PS:在不同的隔离级别下,出现上面的情况也不一样。

1、read uncommitted 读取未提交的数据

解释:两个事务,事务1写入了一条数据但是还未提交,事务2就可以读取到这条数据。

存在的问题:脏读、幻读、不可重复读

2、read committed 读取已提交的数据 (Oracle数据库的默认隔离级别)

解释:事务1未提交,事务2提交了新数据,事务1可以获取事务2提交的数据。可以解决脏读问题。

存在的问题:幻读、不可重复读

3、repeatable read 可重复读数据 (mysql的默认隔离级别)

解释:事务1在启动时给数据库”创建一个快照”,随后事务1在未提交之前所读取的数据都从这个快照中获取。即使其他事务修改了数据也不受影响。

不存在脏读、幻读、不可重复读(通过MVCC多版本并发控制解决不可重复读问题)

4、serializable 串行化:可以解决 脏读 不可重复读 和 虚读 -相当于锁表

没研究,不解释~

专注于 服务器运维与web架构

E-mail:venus#rootop.org

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值