# 前言
## 先上一个图
## 为什么要使用锁?
## 扩展阅读
一、MySQL 全局读锁
1.1 全局读锁的基本概念
1.2 全局读锁的使用场景
1.3 全局读锁的加锁与解锁
# 需要你连接数据库并使用数据库, 以下为示例
# mysql -u root -p
# use testDatabase;
# 加读锁
flush tables with read lock;
# 解锁
unlock tables;
1.4 数据库的备份或导表
二、MySQL 表锁
2.1 元数据锁(Matadata Lock - MDL)
2.1.1 MDL 锁基本信息
2.1.2 MDL 简单实例
2.2 自增锁(AUTO-INC 锁)
2.2.1 自增锁 - 锁定模式
2.2.2 自增锁 - 自我理解
连续锁定模式 :innodb_autoinc_lock_mode
= 1
交错锁定模式 : innodb_autoinc_lock_mode
= 2
产生序列间隙 和 “丢失”自动增量值
第二种情况 :
MySQL 5.7 及之前版本
, 事务回滚后并重启 MySQL 服务, 则自增的 ID 值将重新分配给回滚之前最大的自动 ID 值。MySQL 8.0
中, 自增 ID 值将被持久化, 防止重复使用以前分配的值。
2.3 意向锁(隐式)
2.3.1 意向共享锁(IS)
2.3.2 意向独占锁(IX)
2.3.3 意向锁的兼容性
三、MySQL 行锁
3.1 共享锁(S)
3.1.1 加共享锁
# 在 select 查询语句末尾加 lock in share mode
# 例:
select name from user where id = 5 lock in share mode;
3.1.2 兼容表格
3.2 独占锁(X)
3.2.1 加独占锁
# 在语句末尾加 for update
# 例:
select name from user where id = 5 for update;