锁的概述
锁的分类:全局锁,表级锁,行级锁
全局锁:
在数据库上了全局锁后,不允许写但允许读:
加锁:
flush tables with read lock;
备份(在Windows下使用MySQLdump工具):
mysqldump -h192.168.136.132(Linux地址) -uroot(用户) -p1234(密码) db01(数据库) > D:/db01.sql(文件保存位置)
解锁:
unlock tables;
所以在innoDB引擎中,我们可以在备份加上参数--single-transaction来直接备份:
mysqldump --single-transaction -h192.168.136.132(Linux地址) -uroot(用户) -p1234(密码) db01(数据库) > D:/db01.sql(文件保存位置)
表级锁:
表级锁中的表锁:
共享读锁:不阻塞进程的读,但是阻塞写
独占写锁:对自己进程无限制,但是阻塞其他进程的读和写
表级锁中的元数据锁(MDL):
元数据=表结构;其实就是你在开启事务或者操作数据库的时候不可以同时修改表的结构
表级锁中的意向锁:
行级锁:
行级锁中的行锁:
直接说人话:两个事务在对同一行数据可以同时读读,不可以同时读改,改改; 读代表S(共享锁),改代表X(排他锁)
但是有这种情况:如果没有使用索引进行检索数据,行锁会直接升级为表锁,并发性能降低;此时涉及到update的优化,可以转到:直接拿下MySql--SQL优化篇
行级锁中的间隙锁和临键锁:
总结