У меня есть webapp, который в настоящее время хранит все поисковые запросы пользователя в таблице search_log. Теперь я хочу создать другую таблицу с именем results_log, которая хранит все результаты, которые мы предоставляем пользователю. Таблица search_log содержит первичный ключ с именем id_search, а таблица журналов результатов имеет внешний ключ id_search и еще одно поле id_result. Поле id_searched является полем auto_incrementing в обеих таблицах.MySQL Вставка состояния гонки
В моем веб-приложение, которое я сделал бы вставки в этом последовательном порядке:
insert into search_log table
insert into result_log table
Я беспокоюсь это может вызвать состояние гонки. Если пользователь А и пользователь B и завершить веб-приложение, и достичь этой части кода примерно в то же время, возможно, что заказ будет идти:
User A -> Insert into search_log
User B -> Insert into search_log
User B -> Insert into result_log
User A -> Insert into result_log
Поскольку обе таблицы auto_incrementing на id_search поле, я «Взволнованный пользователь A и Пользователь B будут обмениваться данными. Я также думал о запросе id_search, но это похоже на еще худшее решение.
Мой вопрос: -Вы можете исправить это состояние гонки? -может ли одно решение вставляться в две таблицы с одним SQL-запросом? Это возможно?
Я подумал об этом, но что, если пользователь А вставит в таблицу search_log, а затем, прежде чем я могу запросить последний идентификатор вставки, пользователь В вставит в таблицу search_log. Возможно, у меня есть два пользователя с одинаковым поисковым кодом? – user387049
Вы не запрашиваете последний идентификатор вставки, это функция MySQL. Он возвращает идентификатор вставки для последней вставки в вашем сеансе. –