1、行锁是什么?
字面意思,给一行数据加锁。
InnoDB 行锁是通过给索引上的索引项加锁来实现的,如果没有索引,InnoDB 将通过隐藏的聚簇索引来对记录加锁。
注意:行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。 两个事务不能锁同一个索引。
2、三种算法
(1)Record lock:记录锁,单个行记录上的锁
锁住具体的索引项,当SQL执行按照唯一性索引进行数据的检索时,查询条件等值匹配且查询的数据是存在,这时SQL语句加上的锁即为记录锁Record locks,锁住具体的索引项
BEGIN;-- 开始事务
SELECT * FROM my_table WHERE id = 2021 FOR UPDATE; -- 排它锁的记录锁算法
ROLLBACk;-- 回滚事务
# 普通事务执行
SELECT * FROM my_table