行锁。Innno引擎实现了以下两种类型的行锁:

 

1、共享锁(S): 允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。 简单说就是共享锁之间兼容,共享锁与排他锁互斥

2、排他锁(X): 允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。 简单说就是如果第一个事务获取到某行数据的排他锁,那么后续其他事务就不可以再获取这行数据的 共享锁及排他锁

 

当我们执行对应的SQL语句,就会产生对应的锁,可以是自动加的锁,也可以是手动加的锁。如下

SQL语句行锁类型说明
insert排他锁自动加锁
update排他锁自动加锁
select不加任何锁
select...lock in share mode共享锁需要手动在select之后在lock in share mode
select...for update排他锁需要手动在select之后加for update

 

行锁演示。注意默认情况下,InnoDB引擎在repeatable read事务隔离级别运行,InnoDB使用 临键锁(next-key)进行搜索和索引扫描,以防止幻读。

1、对于唯一索引进行检索时,对已存在的记录进行等值匹配时,将会自动优化为行锁

2、InnoDB的行锁是对于索引加的锁,不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁, 此时就会升级为表锁

 

如何查看意向锁及行锁的加锁情况,如下

 

我们用代码演示上面的两种行锁,见对于sql文件