锁
全局锁
-- 加全局锁 flush tables with read lock; -- 数据备份,在windows命令行下执行,不需要在mysql命令行下执行
-- --single-transaction用于完成主从分离时,不加锁的一致性数据备份
mysqldump [--single-transaction] -u root -p 123456 需要备份的数据库名称 > 路径/备份文件名.sql -- 解锁 unlock tables;
表级锁
- 表锁
-- 加锁 lock tables 表名 read/write -- 解锁 unlock tables -- 或者客户端断开连接也会解锁
- 表共享读锁
- 表独占写锁
- 元数据锁
- 意向锁
为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。
-
- 意向共享锁(IS):由语句select···lock in share mode添加
与表锁共享锁(read)兼容,与表锁排他锁互斥
-
- 意向排他锁(IX):由insert、update、delete、select···for update添加
与表锁共享锁(read)及排他锁(write)都互斥,意向锁之间不会互斥
行级锁
- 行锁
- 共享锁
- 排他锁
因此,insert、delete、update等时,会自动加行锁排他锁和意向排他锁
手动在select之后加lock in share mode时,会加上行锁共享锁和意向共享锁
- 间隙锁、临键锁
在重复读事务隔离级别运行时,间隙锁用于防止幻读
间隙锁的唯一目的是防止其他事务插入间隙,间隙锁可以共存,一个事务采用的间隙锁不会阻止另一个事务在同一间隙上采用间隙锁
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。