各种锁简要介绍
1、表级锁(锁定整个表)
2、页级锁(锁定一页)
3、行级锁(锁定一行)——锁索引,如果没有索引,InnoDB会通过隐藏的聚簇索引来对记录加锁(对表中所有数据加锁,和表锁差不多)
4、共享锁(S锁,MyISAM 叫做读锁)
可以在一个资源加多个共享锁(允许多个事务读),但也得所有共享锁都释放之后才能修改。
select * from table lock in share mode
5、排他锁(X锁,MyISAM 叫做写锁)——数据库增删改操作默认加排它锁,查询不加锁。
一个资源只能加一把排它锁,加锁后,自身可以进行增删改查,其他人无法进行任何操作。
select * from table for update
6、悲观锁(抽象性,不真实存在这个锁)
实际采用了排它锁实现,影响吞吐,因此适用于写操作居多、强一致性、对吞吐要求不高的场景;
7、乐观锁(抽象性,不真实存在这个锁)
靠表设计和代码实现,乐观锁更新有一定风险失败,因此适用于查询操作居多的场景。
一般是加versio