我们在数据库执行update语句的时候,到底是锁表还是锁行?这里直接用MySQL上例子测试下。
一、环境准备
1、新建一个表create table test_update(
id BIGINTnotnullprimary key COMMENT'主键ID,雪花算法生成',
name VARCHAR(100)COMMENT'姓名',
user_no VARCHAR(20)COMMENT'用户编号'
);
2、插入两条数据insertintotest_update(id,name,user_no)values(1,'张三','001');
insertintotest_update(id,name,user_no)values(2,'李四','002');
二、开始测试
场景一:不加索引开启事务
sql1:update test_update set name=’张三1’ where user_no in(‘001’);
不提交事务
开启事务
sql2:update test_update set name=’李四1’ where user_no in(‘002’);
提交事务
我们发现在sql1不提交事务的情况下,sql2被阻塞了,只有当sql1的事务提交后sql2才会执行成功。
总结:在不加索引的情况下,update语句锁表。
场景二:加索引先在user_no加索引
ALTER TABLE test_update ADD INDEX index_name (user_no);
开启事务
本文链接:https://my.lmcjl.com/post/12980.html
展开阅读全文
4 评论