Mysql锁一(白话文)

📅 2026/7/28 22:08:26
Mysql锁一(白话文)
锁锁的分类有很多其实就是用C语言写了代码逻辑比如当你执行SELECT...FORUPDATE时// 极简伪代码if(内存中的锁标志0){内存中的锁标志1;// 加锁成功执行你的SQL;}else{将当前线程挂起睡眠放入等待队列;}不同的锁实现的代码逻辑不一样罢了锁的分类Innodb引擎1.按粒度分类行级锁、表级锁2.按属性共享锁S锁、排它锁X锁3.按状态意向共享锁、意向排它锁4.按算法间隙锁、记录锁、临键锁5.按模式乐观锁、悲观锁附上一个图全局锁和页级锁是MyISAM引起的锁的介绍表级锁如果查询条件没有用到索引或者索引失效InnoDB 会锁住整张表的所有行实际是锁住所有聚簇索引记录相当于表锁。行级锁行级锁并不是直接锁记录而是锁索引共享锁\排它锁①一个是可一起读不能改②一个是不能读也不能改意向共享锁\排它锁它的作用是在表级别标记“即将要加行锁意向共享\排它”不然如果要加表锁需要遍历全表看一看有没有行要加表锁间隙锁记录锁临键锁1间隙锁锁住一个间隙但是数据可以更改2记录锁锁命中的那行记录3临键锁锁住之间的记录不能插入删除修改乐观锁和悲观锁这两个是代码思想①一个乐观认为没人动我的数据不加锁使用版本号验证是否有人动过我的数据②一个悲观的认为我的数据一定会被动先加锁。总结想也能想出来不加锁并发高适用多读少改加锁并发低适用多改少读使用场景和优缺点自己ai一下总结了解mysql锁机制下一篇介绍1分布式中如何保证数据一致性2分布式中跨库ACID如何保证3分布式中读写不一致刚写入的数据读不到4分布式中数据冲突谁的数据是对的想了解的任意内容打在评论区一起讨论