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