Временные проблемы в нескольких операторах SELECT в транзакции - PullRequest
0 голосов
/ 05 декабря 2018

Мой вопрос касается времени выполнения запросов SELECT в транзакции.Мне интересно, если несколько операторов SELECT будут возвращать данные, как это было в начале транзакции, или они будут возвращать значения, как они есть, когда выполняется запрос.В последнем случае это будет проблемой, если другой процесс изменяет некоторые таблицы.Вот пример, где шаги выполняются последовательно двумя процессами:

+------------------------------------------------------+--------------------------------+
|                      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) требует, чтобы данные были собраны одновременно, чтобы представить последовательный снимокбаза данных.Это тот случай?Если нет, то как можно предотвратить это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...