mysql InnoDB 行锁的实现 -Oracle是对每行数据加锁实现
程序员文章站
2022-06-02 12:27:53
...
通过索引项加锁实现
1.只有条件走索引才能实现行级锁
2.索引上有重复值,可能锁住多个记录
3.查询有多个索引可以走,可以对不同索引加锁
4.是否对索引加锁实际上取决于mysql的执行计划
自增主键做条件更新,性能最好
测试验证:
1.创建t2表,在a上添加索引
create table t2(a int,b int,key idx1(a));
2.在t2表上插入数据:
insert into t2 values(1,1);
insert into t2 values(1,5);
在a连接中开启事务并对数据进行加锁:
在b连接中开启事务也加锁
会发现b连接中加锁操作阻塞,最终事务被回滚。
这里简单引申一下:如果彻底没有索引的话,那应该就是锁表了。这里不做演示。