首页 > 数据库技术 > 详细

数据库的隔离级别

时间:2019-08-09 23:35:14      阅读:140      评论:0      收藏:0      [点我收藏+]

关系型数据库的隔离级别有四种:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和序列化(Serializable)

多事务并发执行常见的问题:脏读、幻读、不可重复读

 

脏读:事务1更新了数据,但没有提交;事务2读取了更新后的数据。然后事务1回滚了,事务2读取到的数据是无效的。

幻读:事务1读取数据时事务2增加了一条记录并提交,事务1再次读取时可以读取到事务2新增的那一条记录。或者可以这样说,幻读是指在同一个事务的两次查询(同一范围)中,后一次查询读取到了前一次查询没有读取到的数据。更通俗点说,事务1第一次读取还没有那条记录,第二次读取却有了那条记录,是不是跟见鬼了一样?难道第一次是幻觉?

不可重复读:事务1读取记录时,事务2更新了记录并提交,事务1再次读取时可以看到事务2修改后的记录。通俗点说:事务1第一次读到的数据是这样的,第二次读到的却是那样的......

幻读和不可重复读:不可重复读重点在于update和delete,而幻读的重点在于insert。

 

读未提交:事务中修改的数据,即便该事务还未提交,其他事务也可以读取到。可能会因此出现脏读、幻读和不可重复读。

读已提交:事务中修改的数据,只能等事务提交后才能够被读取到。可能会因此产生不可重复读和幻读。

可重复读:事务开始读数据的时候,就对数据加了一个悲观锁,其他事物不能够修改数据,因此可以保证前后读取到的数据一致。但是,它不会锁住insert的数据,因此依然会存在幻读的情况。

串行化:串行化是最高的隔离级别。它通过强制事务串行执行,避免了前面的幻读情况。由于它大量加上锁,导致大量的请求超时,因此性能会比较低下。在特别需要数据一致性且并发量不大的时候才可能会考虑使用这个隔离级别。

数据库的隔离级别

原文:https://www.cnblogs.com/yangwanhao/p/11329699.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!