MySql学习笔记——锁(六)
锁的作用
- 避免资源争用的机制功能
- 资源争用:多个任务同时使用一个资源
- 数据库中,数据(记录)就是资源,不同客户端对数据CRUD就是不同任务
- 思路:在某个任务使用资源时,标记出来,其他任务就不能同时操作,只能等待或者放弃
流程
- 先尝试加锁,如果锁定成功,就使用资源,使用结束后释放锁,否则只能等待或放弃
锁的类型
共享锁,读锁,S-lock
在需要执行读操作时,增加的锁定类型。会共享读操作,其他任务也可以进行读操作,但是大家都不能执行写操作
排它锁,独占锁,写锁,X-lock
在执行写操作时会增加的锁定类型,会独占该资源,其他资源既不能读,也不能写
mysql在执行任何sql时,会自动增加对应锁定,通常不需要人为操作
锁粒度,只有数据库才有的概念
- 行级锁row-level:一行
- 表级锁table-level:整张表,无论是共享锁还是独占锁
- innodb表级锁和行级锁都支持
锁的相关语法
表共享锁示例
等到左边客户端释放锁后,左边的写入操作才会成功
表独占锁示例
行锁示例
innodb的行锁,是一个子范围锁,依据条件锁定部分范围,而不是映射到具体的行上,学名:间隙锁