当前位置:Gxlcms > 数据库问题 > mysql ACID与四种隔离级别归纳总结

mysql ACID与四种隔离级别归纳总结

时间:2021-07-01 10:21:17 帮助过:38人阅读

操作,另一事务两次查询的数据不一致 幻读:   一事务对数据进行了新增操作,另一事务两次查询结果不一致。   我们看到不可重复读与幻读好像好类似,但其实它们是有很大的不同,不可重复读主要体现在update与delete,而幻读主要体现在insert,从实现层面上讲,要解决不可重复读,我们只需要对查询的数据进行加锁就可以实现,此时update与delete这些行都会阻塞等待,但是insert依旧可以,避免不了幻读,而要解决幻读,必须对其行与行之前也加锁,在mysql中,是通过next key lock(行锁+gap lock)来实现的。     隔离级别: read uncommited未提交读:   隔离级别为0,会有脏读,不可重复读,幻读   read commit提交读:   隔离级别为1,不会有脏读,但有不可重复读,幻读   repeatable read可重复读:   隔离级别为2,不会有脏读,不可重复读,但依旧会有幻读。但为什么说mysql中的repeatable read解决了幻读?本来是会有幻读的,但是它采用了next key lock加上for update来避免,InnoDB提供了这样一种机制,通过加锁去查询可以得到最新的数据,如两个事务同时开启,A事务插入了一条数据,并提交,B事务去查select * from t,此时B是不能查询到A事务提交的数据的,但是加多一个for update,即select * from t for update,就能查找刚刚A事务插入的数据。所以我们才说mysql在repeatable read隔离级别下可以避免幻读的原因,记得加for update。   serializable可序列化:   隔离级别为3,不会有脏读,不可重复读,幻读。但效率最低,并发性能最差,一般情况下不会使用。            

mysql ACID与四种隔离级别归纳总结

标签:height   abi   ted   数据不一致   update   序列化   特性   持久性   提交   

人气教程排行