写点什么

MySQL 锁

用户头像
无心
关注
发布于: 2021 年 03 月 28 日

按粒度分类

  1. 全局锁

对数据库实例加锁;

比如场景需要主从手动切换,可以 执行 flush table with read lock, 锁库;

  1. 表级锁

对整个表锁定;

myisam 默认

  1. 行级锁

对表的行进行锁定;

  1. 页级锁

BDB 引擎下,可以使用;

按模式分类

  1. 乐观锁

每次操作数据时都认为没有其他人会更改数据;

需要业务层实现, 常规都是加自增版本号, 更新时带版本号与事务内版本比较, 相同则提交;

  1. 悲观锁

每次操作数据时都认为其他人会更改数据;

按属性分类

  1. 共享锁

读锁(S 锁), 加锁期间, 其他事务允许读取, 不允许修改;

select ... lock in share mode;

  1. 排他锁

写锁(X 锁), MySQL 引擎自己实现;

比如 InnoDB , insert 、update、delete 都会为对应数据加上锁, select 不会加锁;

间隙锁

  • 介绍

  • 死锁问题

1、环境数据准备

8.0.22 版本, 表 gap_lock_test 两个字段 id、name, id 是主键, 手动插入 3 条数据 1、10、20;

隔离级别 RR;


2、开事务操作


用户头像

无心

关注

8年+ java 开发经验 2019.02.13 加入

原来过得很快乐

评论

发布
暂无评论
MySQL 锁