数据库的四种隔离级别
来源:互联网 发布:2016民营经济数据 编辑:程序博客网 时间:2024/05/19 04:53
数据库的四种隔离级别
隔离级别的作用
能够保证多个线程同时操作一个数据时的正确性。
名词解释
1.脏读
即读取到不正确的数据,因为另一个事务可能还没提交最终数据,这个读事务就读取了中途的数据,这个数据可能是不正确的。
update account set money=money+100 where name=’B’; (此时A通知B)update account set money=money - 100 where name=’A’;
例如:用户A向用户B转账100元,当只执行第一条SQL时,A通知B查看账户,B发现确实钱已到账(此时即发生了脏读),而之后无论第二条SQL是否执行,只要该事务不提交,则所有操作都将回滚,那么当B以后再次查看账户时就会发现钱其实并没有转。
解决方法:读已提交
2.不可重复读
即在一次事务之间,进行了两次读取,但是结果不一样,可能第一次id为1的人叫“李三”,第二次读id为1的人就叫了“李四”。因为读取操作不会阻止其他事务。
不可重复读和脏读的 区别 是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。
解决方法:可重复读
3.幻读
可重复读阻止的写事务包括update和delete(只给存在的表加上了锁),但是不包括insert(新行不存在,所以没有办法加锁),所以一个事务第一次读取可能读取到了10条记录,但是第二次可能读取到11条,这就是幻读。
不可重复读与幻读 区别
不可重复读的重点是修改:同样的条件, 你读取过的数据, 再次读取出来发现值不一样了
幻读的重点在于新增或者删除:一个事务第一次读取可能读取到了10条记录,但是第二次可能读取到11条
解决方法是:串行化
四种隔离级别
(一)读未提交(Read uncommitted)
写事务阻止其他写事务,避免了更新遗失。但是没有阻止其他读事务。
存在的问题:脏读。
(二)读已提交(Read committed)
写事务会阻止其他读写事务。读事务不会阻止其他任何事务。
(三)可重复读(Repeatable read)
读事务会阻止其他写事务,但是不会阻止其他读事务。
(四)可串行化(Serializable)
读加共享锁,写加排他锁。这样读取事务可以并发,但是读写,写写事务之间都是互斥的,基本上就是一个个执行事务,所以叫串行化。
- 数据库的四种隔离级别
- 隔离级别的作用
- 名词解释
- 脏读
- 不可重复读
- 幻读
- 四种隔离级别
- 一读未提交Read uncommitted
- 二读已提交Read committed
- 三可重复读Repeatable read
- 四可串行化Serializable
参考:
http://blog.csdn.net/gaopu12345/article/details/50868501
http://www.cnblogs.com/fjdingsd/p/5273008.html
http://www.2cto.com/database/201604/497860.html
http://blog.csdn.net/v123411739/article/details/39298127
- 数据库事务的四种隔离级别
- 数据库的四种隔离级别
- 数据库的四种隔离级别
- 数据库的四种隔离级别
- 数据库的四种隔离级别
- 数据库的四种隔离级别(转载)
- 数据库的四种隔离级别
- 数据库事务的四种隔离级别
- 数据库的四种隔离级别
- 数据库的四种隔离级别
- 数据库四种隔离级别
- 数据库四种隔离级别
- 数据库四种隔离级别
- 数据库四种隔离级别
- 数据库的四种事务隔离级别解析【原创解析】
- 转载-数据库的四种事务隔离级别
- 数据库事务四种隔离级别
- 数据库事务四种隔离级别
- Android 开源网站
- JS中ajax学习基础教程
- Data truncation: Data truncated for column 'content' at row1
- 1034: 素数问题
- readolny和disabled区别
- 数据库的四种隔离级别
- 你好博客
- HTML5触摸事件(touchstart、touchmove和touchend)
- Android Rxjava 使用
- 使用国内docker镜像源
- HTML5里的placeholder属性
- Android Rxjava Operators
- 【Android Studio】分类整理res/Layouts中的布局文件(创建子目录)
- 染色+最小生成树