MySQL 锁原理
2022/3/20 2:28:22
本文主要是介绍MySQL 锁原理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
锁
读锁 :共享锁
写锁 : 排他锁
锁分为读锁和写锁,简单理解:对某一行数据加了读锁,其他的人可一来读这一条数据,而不能来更新这条数据,如果加了写锁,其他人既不能更新,也不能读取
但是 两种锁都不能对 select 语句进行阻止,也就是说select 语句游离在锁之外
普通的 select 语句不会加任何锁,
select 。。。。。。。。。。。。。 lock in share mode 会加上S锁
隔离性不同的时候,事务之间的锁的影响也是不一样的
读已提交 Read Commited 隔离性下
1.事务A 查询主键并且上X锁写锁,,事务B再次查询相同的条件并且上X锁写锁的时候,事务B会阻塞,但是查询其他的条件并不会阻塞
2.事务A查询唯一索引的时候于上面主键的效果是一样的
3.事务A查询普通索引并且上X锁写锁,所有查出来的行全部都加锁,事务B进行查询上锁会阻塞,前三个情况都是一样的
4.没有索引的情况下,走全表扫描,也知识查询出来的结果才会上锁
读已提交的级别下,就算上锁,也可以插入数据,但是可重复读的级别情况下是不能插入的,进行插入的事务会阻塞 ,避免了幻读的现象,如果插入的数据跟上锁的数据相邻,就会上锁,如果不相连就不会上锁
相邻 举例:下图中,查询e为a 的行,插入a1,a1>a,所以会插入在a 和 b 中间,就会上锁,如果插入 2 ,就会插入在1 和 a 中间,就不会上锁
最极端的情况下,在可重复的隔离级别下,查询某一字段并上锁,是不能修改任何一行数据的,因为比如查询 C = 1 ,当其他行的数据进行修改,将 C 的 值由 2 改为了 1 , 下一次读取数据也会增加这一行,产生幻读的现象,所以为了避免幻读,就不允许进行修改
这篇关于MySQL 锁原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-23BinLog入门:新手必读的MySQL二进制日志指南
- 2024-10-23Binlog入门:MySQL数据库的日志管理指南
- 2024-10-22MySQL数据库入门教程:从安装到基本操作
- 2024-10-22MySQL读写分离入门教程:轻松实现数据库性能提升
- 2024-10-22MySQL分库分表入门教程
- 2024-10-22MySQL慢查询的诊断与优化指南
- 2024-10-22MySQL索引入门教程:快速理解与应用指南
- 2024-10-22MySQL基础入门教程:从安装到基本操作
- 2024-10-22MySQL数据库中的Binlog详解与操作教程
- 2024-10-12部署MySQL集群项目实战:新手入门教程