我的问题是关于事务中SELECT查询的时间安排。我想知道多个SELECT语句是否将返回事务开始时的数据,或者它们是否将在执行查询时返回值。在后一种情况下,如果其他进程修改了某些表,这将是一个问题。这是一个示例,其中步骤由2个过程依次完成:
+------------------------------------------------------+--------------------------------+
| Process 1 | Process 2 |
+------------------------------------------------------+--------------------------------+
| query("START TRANSACTION"); | |
| $res1 = query("SELECT foo1 FROM table1 FOR UPDATE"); | |
| | $res = query("UPDATE table2"); |
| $res2 = query("SELECT foo2 FROM table2 FOR UPDATE"); | |
| doSomeStuff($res1, $res2) | |
| query("COMMIT"); | |
+------------------------------------------------------+--------------------------------+
在示例中,函数doSomeStuff($res1, $res2)
要求同时收集数据,以表示数据库的一致快照。是这样吗如果没有,防止这种情况发生的正确方法是什么?