
文章插图

文章插图
? 然后在隔离级别为读已提交的连接中 插询表account,可以看到查询到的数据变成了其他连接的事务提交的 数据,说明,在隔离级别为读已提交下,出现了不可重复读和幻读

文章插图
- 重新开启两个连接,两个连接的隔离级别均为可重复读

文章插图
- 然后两边均开启事务

文章插图
- 在一个连接中选择数据库,然后在account表中插入一条数据,再更新一条数据(未提交)
文章插图
此时该连接中的表情况为:
文章插图
在另一个连接中选择数据库,查询表account , 可以看到查询到的表数据依旧是开启事务时的样子,没有受到其他事务的影响,即没有产生脏读
文章插图
- 在原先修改数据的连接中输入commit提交
文章插图
在另一个连接中再查询表account , 可以看到数据依旧是开启事务的时刻的样子
即,没有产生不可重复读和幻读
文章插图
3.4可串行化(serializable)
- 将上面两个连接其中一个重新启动,将新连接设置隔离级别为可串行化(serializable)
文章插图
此时两个连接的隔离级别分别为 可重复读 和可串行化(serializable)
文章插图
- 这时分别在两个连接中均开启事务
文章插图
- 在隔离级别为可重复读的连接中分别插入、更新数据(未提交)
文章插图
? 在另一个隔离级别为可串行化的连接中选择数据库 。然后查询表account,回车时会发现卡住了,这是因为 可串行化会加锁
A连接在操作表的时候,事务还没有结束,这时B连接也尝试操作该表,此时将会检查A的事务有没有结束 , 如果没有结束,B连接的操作就会进行等待 , 直到A连接的事务提交
文章插图
? 这时,在隔离级别为可重复读的连接中提交事务

文章插图
?可以看到可串行化级别的连接中可以成功操作表了
?

文章插图
综上说明,可串行化级别下,不仅不会出现脏读、不可重复读、幻读 , 还会加锁读
4.设置隔离【day08-MySQL事务】
推荐阅读
- MySQL 窗口函数
- 线上服务宕机,码农试用期被毕业,原因竟是给MySQL加个字段
- mac通过docker一键部署MySQL8
- day07-2MySQL索引
- CentOS部署MySQL
- MySQL用户也可以是个角色
- python+request+pymysql+pytest数据驱动
- CentOS 7.9 安装 MySQL 5.7.35
- 关于windows-server-下MySQL Community版本的的安装与配置
- InnoDB关于事务、锁、MVCC专题