因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是READ-COMMITTED(读取提交内容):,但是你要知道的是InnoDB 存储引擎默认使用 REPEATABLE-READ(可重读)并不会有任何性能损失 。
InnoDB 存储引擎在 分布式事务 的情况下一般会用到SERIALIZABLE(可串行化)隔离级别 。
实际情况演示
MySQL 命令行的默认配置中事务都是自动提交的,即执行SQL语句后就会马上执行 COMMIT 操作 。如果要显式地开启一个事务需要使用命令:START TARNSACTION 。
我们可以通过下面的命令来设置隔离级别 。
•START TARNSACTION |BEGIN:显式地开启一个事务 。
•COMMIT:提交事务,使得对数据库做的所有修改成为永久性 。
•ROLLBACK 回滚会结束用户的事务,并撤销正在进行的所有未提交的修改 。
在下面我会使用 2 个命令行 MySQL ,模拟多线程(多事务) 。
脏读(读未提交)
文章插图
避免脏读(读已提交)
文章插图
不可重复读
还是刚才上面的读已提交的图,虽然避免了读未提交,但是却出现了,一个事务还没有结束,就发生了 不可重复读问题 。
文章插图
可重复读
文章插图
防止幻读(可重复读)
文章插图
一个事务对数据库进行操作,这种操作的范围是数据库的全部行,然后第二个事务也在对这个数据库操作,这种操作可以是插入一行记录或删除一行记录,那么第一个是事务就会觉得自己出现了幻觉,怎么还有没有处理的记录呢? 或者 怎么多处理了一行记录呢?
幻读和不可重复读有些相似之处 ,但是不可重复读的重点是修改,幻读的重点在于新增或者删除 。
推荐阅读
- 渐变工具调整法 今日带你认识PS颜色调整
- 氟轻松酊,复方醋酸氟轻松酊
- 20分钟带你掌握JS Promise和Async/Await
- 带你认识PS图像清晰增强
- 小青柑是属于什么茶,小青柑是什么茶带你全面了解小青柑
- 智能电视参数详解,轻松了解电视
- 一文读懂微服务监控之分布式追踪
- 带你玩转JSP网站开发技术
- 一文让你享用 Google 全套服务
- 一文带你掌握mybatis的所有全局配置