MySQL锁
锁解决的问题

锁的分类
全局锁(只读)
具体使用
1.添加全局锁
语法:flush tables with read lock;
flush tables with read lock;
添加全局锁后,不能使用任何增、删、改操作,可以使用查询操作,更新操作被阻塞
2.执行数据备份,利用MySQL提供的工具mysqldump
语法:mysqldump -uroot -proot 数据库名 > 具体存入脚本名称.sql
mysqldump -uroot -proot 数据库名 > 具体存入脚本名称.sql
3.备份之后,解锁指令(释放全局锁)
语法:unlock tables;
unlock tables;
演示:
添加全局锁
flush table with read lock;

数据备份

释放全局锁
unlock table;

全局锁缺点(力度太大)

表级锁
1.表锁
读锁(read):只能读,不能写

写锁(write):既能读,也能写

具体用法:
2.元数据锁

3.表锁:意向锁
意向锁判断依据是是否兼容,如果是可兼容的锁就可以直接加上,如果是排他锁则被阻塞,知道行锁释放
意向锁的使用
查看意向锁及行锁加锁情况:
行级锁
1.行级锁的分类
2. 行锁/记录锁
行锁的类型
在InnoDB引擎中实现了两种类型的行锁

锁模式兼容性

行级锁定实现方式——必定通过索引实现

常见SQL语句执行时的加锁情况

行锁只能锁定当前行所在的一条数据,其他数据不被锁住
行锁只有索引存在时才会生效,否则会生成表锁
间歇锁/临键锁
唯一索引等值查询
非唯一索引等值查询(尽量避免)
唯一索引范围查询
加锁规则:











