MySQL中都有哪些锁类型?现场!
- 内容介绍
- 文章标签
- 相关推荐
前言——别说我没提醒你, MySQL的锁可不是闹着玩的
先来一句鸡汤:数据库的锁,就像是夜店里的保镖,谁不想进门,却得排队等。这玩意儿一不小心就卡死你的业务,甚至让你怀疑人生。下面咱们把MySQL里各种“神秘组织”——锁类型——一股脑儿抖出来 顺便甩几句情绪垃圾,保准你看完后想马上去重启实例。
1️⃣ 行级锁 & 表级锁 & 页级锁——粒度大小随意切
痛并快乐着。 行级锁是最细的, 你想把某条记录拎出来单独拴住;表级锁就是把整张桌子搬到门口,谁想坐都得等;页级锁介于两者之间,好像是把几行装进一个盒子里封死。

要记住一点:InnoDB默认用行级锁,主要原因是它“高效”。MyISAM只能玩表级锁,那种场景下只适合一次性导入大批数据后再读,累并充实着。。
2️⃣ 共享锁 S 锁 & 排他锁 X 锁——爱分享还是爱独占
这是可以说的吗? S 锁可以多人一边读,但没人能写。 X 锁写谁也不让读,只有拿到钥匙的人才能动弹。
有意思的是 如果数据已经被 X 锁住读操作仍然可以看到旧版本的数据但不能加 S 锁,也就是“读不到最新的”。这点经常被新人忽略, 以为 X 锁直接阻塞 SELECT,后来啊却发现 SELECT 还能跑,只是看不到未提交的改动,试试水。。
3️⃣ 意向锁——给表加标记,让系统省事儿
不忍卒读。 Intention Shared / Intention Exclusive 就是“我要在这张表里搞点小动作”。它们本身不阻塞任何事务,只是告诉存储引擎:“别在这张表上再加全局排他锁了”。如果你要对某行加 X 锁,就必须先对表加 IX 锁;如果要 S 锁,则先加 IS 锁。
前言——别说我没提醒你, MySQL的锁可不是闹着玩的
先来一句鸡汤:数据库的锁,就像是夜店里的保镖,谁不想进门,却得排队等。这玩意儿一不小心就卡死你的业务,甚至让你怀疑人生。下面咱们把MySQL里各种“神秘组织”——锁类型——一股脑儿抖出来 顺便甩几句情绪垃圾,保准你看完后想马上去重启实例。
1️⃣ 行级锁 & 表级锁 & 页级锁——粒度大小随意切
痛并快乐着。 行级锁是最细的, 你想把某条记录拎出来单独拴住;表级锁就是把整张桌子搬到门口,谁想坐都得等;页级锁介于两者之间,好像是把几行装进一个盒子里封死。

要记住一点:InnoDB默认用行级锁,主要原因是它“高效”。MyISAM只能玩表级锁,那种场景下只适合一次性导入大批数据后再读,累并充实着。。
2️⃣ 共享锁 S 锁 & 排他锁 X 锁——爱分享还是爱独占
这是可以说的吗? S 锁可以多人一边读,但没人能写。 X 锁写谁也不让读,只有拿到钥匙的人才能动弹。
有意思的是 如果数据已经被 X 锁住读操作仍然可以看到旧版本的数据但不能加 S 锁,也就是“读不到最新的”。这点经常被新人忽略, 以为 X 锁直接阻塞 SELECT,后来啊却发现 SELECT 还能跑,只是看不到未提交的改动,试试水。。
3️⃣ 意向锁——给表加标记,让系统省事儿
不忍卒读。 Intention Shared / Intention Exclusive 就是“我要在这张表里搞点小动作”。它们本身不阻塞任何事务,只是告诉存储引擎:“别在这张表上再加全局排他锁了”。如果你要对某行加 X 锁,就必须先对表加 IX 锁;如果要 S 锁,则先加 IS 锁。

