这将会导致,当有多个连接开启事务时,某一连接的事务的查询会受到其他所有连接的事务的影响,这无疑将会导致混乱
最佳情况应该是:一个连接 连接到数据库,操作account表的时候,希望看到的数据应该是,开启事务的这一时刻的数据
文章插图
例子
- 在上个例子开启的两个连接中,将其中一个连接的隔离级别修改为 读已提交,
文章插图
另一个保持隔离级别为可重复读
文章插图
- 两边都开启事务
文章插图
- 在隔离级别为可重复读的连接中插入一条数据
文章插图
然后在隔离级别为读已提交的连接中 插询表account,可以看到查询到的数据还是本连接开启事务时的数据
即,读已提交的隔离级别不会出现脏读现象
文章插图
- 在隔离级别为可重复读的连接中更新一条数据
文章插图
? 然后在隔离级别为读已提交的连接中 插询表account,可以看到查询到的数据变成了其他连接的事务提交的 数据,说明,在隔离级别为读已提交下,出现了不可重复读和幻读
文章插图
- 重新开启两个连接,两个连接的隔离级别均为可重复读
文章插图
- 然后两边均开启事务
文章插图
- 在一个连接中选择数据库,然后在account表中插入一条数据,再更新一条数据(未提交)
文章插图
此时该连接中的表情况为:
文章插图
在另一个连接中选择数据库,查询表account,可以看到查询到的表数据依旧是开启事务时的样子,没有受到其他事务的影响,即没有产生脏读
文章插图
- 在原先修改数据的连接中输入commit提交
文章插图
在另一个连接中再查询表account,可以看到数据依旧是开启事务的时刻的样子
即,没有产生不可重复读和幻读
文章插图
3.4可串行化(serializable)
- 将上面两个连接其中一个重新启动,将新连接设置隔离级别为可串行化(serializable)
文章插图
此时两个连接的隔离级别分别为 可重复读 和可串行化(serializable)经验总结扩展阅读
- 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专题