目录
行级锁
行级锁,一般是指排它锁,即被锁定行不可进行修改,删除,只可以被其他会话select。行级锁之前需要先加表结构共享锁。
- row-level loking,锁住一行记录。
- 开销大,加锁慢,会死锁。
- 锁粒度小,发生所冲突概率小,并发效率高;适合并发写,事务控制。
- 并不是直接丢记录行加锁,而是对行对应的索引加锁:
- 如果sql 语句操作了主键索引,Mysql 就会锁定这条主键索引。
- 如果sql语句操作了非主键索引,MySQL会先锁定该非主键索引,再锁定相关的主键索引。
- 在InnoDB中,如果SQL语句不涉及索引,则会通过隐藏的聚簇索引来对记录加锁。
- 对聚簇索引加锁,实际效果跟表锁一样,因为找到某一条记录就得扫描全表,要扫描全表,就得锁定表。
表级锁
表级锁,一般是指表结构共享锁锁,是不可对该表执行DDL操作,但对DML操作都不限制。
- table-level locking,锁住整个表。