也许你可以在这里为我阐明一些事情:
数据库 = MySQL 5.7
存储引擎:InnoDB
隔离级别:可重复读
下表:
---------------
| MyTable |
---------------
| PK | Concur |
---------------
| 3 | 2 |
---------------
Run Code Online (Sandbox Code Playgroud)
我此时没有进行任何交易,我选择此记录,例如
SELECT * FROM MyTable WHERE PK = 3
并将结果存储在我的程序中。
我现在开始一个数据库事务。在我的事务开始后,外部进程Concur将 = 3 的记录从 2 增加到 3。PK
我还没有再次从我的交易中的该表中读取内容。
我从交易内部发出以下查询:
UPDATE MyTable SET Concur = 3 WHERE PK = 3 AND Concur = 2
这将成功0 records affected。很明显,它会根据我的交易开始后更改的数据进行评估。仍在交易中我随后查询:
SELECT * FROM MyTable WHERE PK = 3
这将返回记录,其中PK = 3 and Concur …