MySQL数据库4种隔离级别 脏读、不可重复读、幻读

脏读、不可重复读、幻读都是在数据库操作中,事务出现交叉时可能出现的异常情况。这种异常情况,其实也不算是数据库出现了错误,而是由于规则制定的不严格出现的特例。解决办法就是更严格的规则,即隔离。
脏读:读到了未提交的数据(脏数据)。
不可重复读:在事务执行的过程中,对同一数据的读取结果不同。
幻读:在事务执行的过程中,对同一数据的读取结果相同。但是在该事务执行结束后(提交或回归),发现数据和执行时的结果不同。不止出现在数据数量的增加,还出现在对同一数据的更改。
脏读、不可重复读和幻读的区别:脏读和不可重复读都可能发生在事务执行的过程中,即执行过程中结果就可能出现不同。而幻读发生在事务执行结束后,即执行中和执行后的结果不同。

1.Read uncommitted(读未提交)(脏读不可重复读幻读
顾名思义,可以读到还未提交的数据,即脏读。当事务A、B同时对某一数据进行操作,出现交叉的情况,B事务修改数据,但未提交,此时A查看会看到已修改的数据。但是此时B由于未提交,所以后续操作可以选择提交或者回滚,如果回滚就会造成A读到的数据和最后的数据不同,造成脏读。
2.Read committed(读已提交) (不可重复读幻读
读已提交的数据。正常情况下不会出现什么问题,但是当事务出现交叉时,在事务的执行过程中会出现不可重复读的现象。当事务A、B对同一数据进行操作,出现交叉,B对数据进行了更改但未提交,此时A进行查看,无异常(读已提交)。B提交事务,此时A再进行查看,发现数据和之前不同,即不可重复读。
3.Repeatable read(可重复读)(幻读
可以实现重复读。同样出现在事务交叉情况,A首先查看数据,然后B对数据进行修改并提交,此时A再次进行查看,数据依然未发生变化。即可重复读,在事务执行过程中对同一数据读取前后一致。但是可能出现幻读,即最后A提交事务,再次查看数据发现和事务中读取的不同。
4.Serializable (串行化) ( )
事务串行化执行,在某个事务执行过程中,其他事务不能对该事务使用到的数据进行修改,即杜绝了数据读取可能不同的情况。

从上至下隔离级别逐渐提高,可能出现的异常也随着级别提高逐渐解决。隔离级别的提高增强了数据的安全性,但是也带来了并发效率降低,性能减低的问题,是个双刃剑。
MySQL的默认隔离级别是可重复度RR。

以上是粗浅的理解,如果有错误欢迎指正讨论。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值