MySQL事务的读脏
来源:互联网 发布:上海磁悬浮 知乎 编辑:程序博客网 时间:2024/06/10 04:55
所谓读脏,是指一个事务读取了,另外一个事务未提交的数据
首先,开启两个命令行窗口,模拟账户a和账户b
登录到数据库,chapter06
设置b账户,事务的隔离级别
MySQL默认的隔离级别是REPEATABLE READ——可重复读
该级别是可以避免读脏的,因此,需要将b账户中事务的隔离级别设置为READ UNCOMMITTED——读未提交
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
参数说明
SESSION,表示当前会话
TRANSACTION,表示事务
ISOLATION,表示隔离
LEVEL,表示级别
READ UNCOMMITTED,表示当前的隔离级别
可以看出,b账户的隔离级别,已经设置为了READ UNCOMMITTED
演示读脏
B账户,为了证明出现读脏的情况,首先,在b账户中开启一个事务,并在该事务中,查询当前账户的余额信息
A账户,在a账户中开启一个事务,在当前窗口中,执行转账功能
注意,此时,不要提交事务
如果,提交事务,就无法演示出现读脏的情况
B账户,a账户执行完转账语句后,b账户查询当前账户
可以看出,a账户已经成功给b账户,转账了100元
这时,由于b账户的事务隔离级别较低,因此,读取了a账户中,还没有提交的内容,出现了脏读的情况,此时,b误以为a账户已经转账成功了,便给a发货
当b发货之后,a如果不提交事务,而是将事务回滚,此时,b就受了损失
演示完毕之后,将a账户中的事务回滚,b账户中的事务提交
设置b账户中,事务的隔离级别
为了防止脏读发生,将b账户的隔离级别设置为READ COMMITED——读提交,该级别可以避免读脏
可以看出,b账户的隔离级别,已经设置为了READ COMMITTED;
验证是否脏读
B账户,在b账户中开启一个事务,在事务中查询个账户的余额
A账户,在a账户中,重新开启一个事务,实现转账功能
B账户,当a账户转账成功之后,在b账户中,查询各账户的余额
可以看出,b账户在同一个事务中,查询结果是一致的,并没有查询到a账户中,未提交的内容
因此,说明READ COMMITTED隔离级别可以避免读脏,最后,分别将a账户和b账户中的事务回滚
- MySQL事务的读脏
- MySQL事务的幻读
- mysql读事务的隔离级别
- MYSQL的事务
- mysql的事务理解
- MySQL的事务
- mysql的事务运作
- mysql的事务
- mysql的事务隔离
- MySQL的事务
- MYSQL的事务详解
- 谈谈mysql的事务
- Mysql的事务
- mysql事务的理解
- mysql的事务级别
- MySQL事务的特性
- MySQL事务的提交
- MySQL的事务初探
- [LeetCode]513. Find Bottom Left Tree Value
- Linux sed命令
- YoucompleteMe安装
- 设计模式-2-外观模式-转载
- Angular2-build文件打开白屏解决
- MySQL事务的读脏
- 字符串--用数组初始化和用指针初始化方法区别
- spring boot
- Spring Boot 动态多数据源
- 2017开始起航,HPB加油
- 设计模式-单例模式
- 汝欲去学诗,工夫在诗外--JAVA
- c++ winpcap开发(4)
- 【栈队列】判断出栈顺序的合法性