《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
关于MySQL的加锁方式及加锁原则,这里就不再赘述了。这里就不再赘述了。
在我知道MySQL 默认隔离级别是RR后,很长一段时间都以为应该不会有人去修改这个默认配置。
但是直到有一天,我们线上发生了一次死锁的问题,我在排查的过程中,才发现我们的数据库用的隔离级别没有使用默认的 RR,而是修改成了Read Committed 。
大家可以通过这个命令查看数据库当前的隔离级别:
select @@tx_isolation;
那么,这里不禁就有疑问了,为啥阿里要把这个数据库隔离级别修改成 RC 呢,背后有什么思考吗?
RR 和 RC 的区别
想要搞清楚这个问题,我们需要先弄清楚 RR 和 RC 的区别,分析下各自的优缺点。
一致性读
====
一致性读,又称为快照读。快照即当前行数据之前的历史版本。快照读就是使用快照信息显示基于某个时间点的查询结果,而不考虑与此同时运行的其他事务所执行的更改。
在MySQL 中,只有READ COMMITTED 和 REPEATABLE READ这两种事务隔离级别才会使用一致性读。
在 RC 中,每次读取都会重新生成一个快照,总是读取行的最新版本。
在 RR 中