3
回答
对Mysql的update操作会阻塞select操作

今天在项目中发现一个问题,MySQL的事务隔离级别是默认的可重复读,对于同一张表,里面存放了大量的名称为A的数据和名称为B的数据。我需要修改数据中某一列的值。为了高效就起了两个线程,线程1update名称为A的记录,线程2update名称为B的记录。但是结果和想的不一样,其中一个线程会操作的时间很长。想了下应该是数据库锁的原因,update的时候会加锁,这时另一个线程update的时候会先select,但是select又会被上一个线程的update操作阻塞。请问有什么解决方案么??谢谢

<无标签>
举报
jieWang0
发帖于5天前 3回/177阅
共有3个答案 最后回答: 1天前

UPDATE操作使用主键时锁行 非主键会锁表

--- 共有 1 条评论 ---
jieWang0我去试试,我疑惑的是MySQL执行update操作的时候好像是先查所有数据,再根据where条件筛选出符合的,然后update。如果这样的话线程1update的时候,线程2update前的查询筛选操作会被阻塞吧??因为行级锁,不知道是不是理解错了 4天前 回复

我不知道是否代码级别如果不用事务,update操作,select时阻塞不会发生,现在的文档都他妈说事务隔离级别阻塞什么的,非要加上事务;那我不用事务是不是就不卡了。我日他吗的很可能和我的想法相反,可能不使用事务也会卡住,如果真那样,我真是要日了写事务官方文档作者他祖先了!

线程1update名称为A的记录,线程2update名称为B的记录.

如果更新语句的条件没有索引,实际是锁住全表。并不是查询语句导致的锁。

顶部