小编Fra*_*k J的帖子

可重复读隔离级别 SELECT 与 UPDATE...WHERE

也许你可以在这里为我阐明一些事情:

数据库 = 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 …

mysql innodb transactions isolation-level

5
推荐指数
1
解决办法
2714
查看次数

标签 统计

innodb ×1

isolation-level ×1

mysql ×1

transactions ×1