当我选择更新的开始和结束行时,mysql会锁定一系列行吗?

时间:2017-08-29 07:35:19

标签: mysql database locking

假设我有一个有两列的表。一个名为id,这是它的主键。另一个叫value。该表有10行,如下所示。

1 'A'
2 'B'
3 'C'
4 'D'
5 'E'
6 'F'
7 'G'
8 'H'
9 'I'
10 'J'

然后我应用这样的查询SELECT * FROM table WHERE id IN (1, 10) FOR UPDATE;我想知道在此之后会发生什么。我记得有一次我从博客上看到它会锁定所有10行。但我不能重复这一点。这个问题确实存在吗?或者只是我被误解了。

2 个答案:

答案 0 :(得分:0)

大多数DBMS默认隔离级别为读取提交, 因此,如果没有采取对策,您会遇到以下问题:

  • 不可重复读取
    因此:
    • 丢失更新
    • 读取倾斜
    • 写歪斜
    • 幻像读

幽灵读现象是你在这种情况下所担心的, 这意味着,如果您在事务期间稍后在更新语句中使用完全相同的where子句,则可能会影响更多/更少或完全不同的行集。

答案 1 :(得分:0)

我已阅读手册帮助:http://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html

由fancyPants给出,那么我确信我所做的不会锁定一系列行。仅锁定所选行。现在我认为我之前读过的博客是错误的。

谢谢。