假设我有一个有两列的表。一个名为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行。但我不能重复这一点。这个问题确实存在吗?或者只是我被误解了。
答案 0 :(得分:0)
大多数DBMS默认隔离级别为读取提交, 因此,如果没有采取对策,您会遇到以下问题:
幽灵读现象是你在这种情况下所担心的, 这意味着,如果您在事务期间稍后在更新语句中使用完全相同的where子句,则可能会影响更多/更少或完全不同的行集。
答案 1 :(得分:0)
我已阅读手册帮助:http://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html
由fancyPants给出,那么我确信我所做的不会锁定一系列行。仅锁定所选行。现在我认为我之前读过的博客是错误的。
谢谢。