1.13 从MySQL事务隔离级别开始

MySQL事务隔离级别有哪些?分别解决了哪些问题?

共有四个隔离级别:

  • 读未提交:

一个事务还没有提交的时候,它做的变更能被其他事务看到

  • 读提交:
    一个事务提交之后,它做的变更才能被其他事务看到

  • 可重复读:
    一个事务执行过程中看到的数据,和事务启动的时候看到的数据是一致的。

  • 串行化:
    会对记录加上读写锁,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成。

事务并发问题存在脏读,不可重复读,幻读这三种问题

脏读:
一个事务读取了另一个事务还没有提交的数据

不可重复读:

一个事务多次读取同一条记录,期间另一个事务修改了数据,导致前后读取的数据不一致

幻读:

多次执行一个查询,在此期间有事务修改了数据, 导致前后查询不一致

读未提交一个问题都没有解决

读已提交可以避免脏读问题

可重复读避免了脏读和不可重复读

串行化所有问题都可以解决,性能最差

串行化隔离级别是通过什么实现的?

所有SQL都会加行级锁,进行增删改查中的一个,其他操作都无法进行。没有MVCC机制(处理并发访问),读写操作也没办法并发

脏读和幻读的区别?

  • 脏读是一个事务读到了另一个未提交事务修改过的数据,如果另外一个事务回滚了,刚才读到的数据就和数据库里面的数据不一样了

  • 幻读是前后两次查询的结果集的数量是不同的,eg:如果我执行了两次select,但第二次返回了第一个没有返回的行数据

MySQL默认隔离级别是什么?如何实现的?

Mysql默认隔离级别是可重复读

一个事务执行过程中看到的数据和启动时看到的数据是一样的

select查询是通过**MVCC(多重)**实现的,在MVCC实现中,每条记录都会有一个版本号,启动时读取了哪个版本号,过程中会一直看开始时候的版本号,从而保证了事务的隔离级别。

可重复读隔离级别是在开启事务之后,执行一条select语句之后,生成一个Read View,后续事务查询数据都复用这个Read View,所以保证了事务期间多次读到的数据是一致的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值