MySQL锁的分类以及基本使用场景
锁的分类:
性能:悲观锁、乐观锁
操作类型:读锁、写锁
数据粒度:表锁、行锁、页面锁
更细粒度:间隙锁、临键锁
读锁又叫共享锁 or S锁(Shared锁),顾名思义同一份数据可以加读锁互不影响
写锁又叫排它锁 or X锁(Exclusive锁),写锁未释放前,会阻塞其他的写锁和读锁
表锁:
表锁也叫表级锁,顾名思义就是在整个数据表加锁和释放锁。Mysql有两种表级锁:一种是表共享锁(Shard Lock),另外一种是表独占写锁(Table Write Lock)。
lock table [tableName] [read|write],[tableName] [read|write];
unlock tables;
行锁:
行锁就是行级锁,在数据行上加锁和释放锁。InnoDB只有两种锁,一种是共享锁S 和排他锁X。锁主要是夹在索引上,如果是非索引字段,可能就会变成表锁。InnoDB的行锁是针对索引加锁,并且索引不能失效,否则也会变成表锁。或者使用lock in share mode指定共享锁,如 select * from account where id = 1 for update;
页面锁:
指的是在页面级别对数据加锁释放锁,这个页指的是内存页,性能开销介于表锁和行锁之间。
间隙锁:
间隙锁指的就是对两个值之间的空隙加锁。MySQL默认的隔离级别是可重复读,在某种程度上可以说解决了幻读问题。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)