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默认的隔离级别是可重复读,在某种程度上可以说解决了幻读问题。
   

posted @   cs7  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
点击右上角即可分享
微信分享提示