mysql 学习
主题:
-- 查询是否自动提交事务select @@autocommit;--关闭自动提交事务set autocommit = 0;--开启--执行--结束 事务start transaction;xxxx;commit;
测试结果与CSDN文章一致:(https://blog.csdn.net/wodeshouji6/article/details/104323875)
更新语句的条件存在索引命中则锁行,若未命中则锁表;另一条更新事务阻塞;
可见:where条件更新是走索引的。当我去除name字段索引时,分析是走全表的。
问题
若更新字段存在索引,是否也会锁行?此时(phone无索引,name字段存在唯一索引)
可见,更新索引字段但where条件索引未命中是锁表的。
使用批量更新是否会锁表?
批量更新两种方式:
第一种:循环根据id进行更新数据 ,可以断定一定是走主键索引的。
第二种更新:使用in进行更新数据 和加上 强制使用in(ids)作为主键索引 force index
update tb_user set phone = '123456789' where id in (1,2);
update tb_user force index (PRI) set phone = '123456789' where id in (1,2);
分析可见是走索引的更新。之前我测试过 但用in的范围索引,in的数据少是走索引的,如果in的数据多的话是走全表扫描的,因此,使用in的时候要留意这个问题。
批量更新数据的事务还没提交,但是另外一条更新是可更新的,
提交事务之后可见都可以命中更新的。也就是锁行更新。