2010-10-14 3 views
0

У меня есть 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-запросом? Это возможно?

ответ

1

Если эти таблицы взаимосвязаны, тогда при вставке следует включать идентификатор автоматического увеличения. После вставки в search_log, получите последний идентификатор вставки, нужный поиск не требуется. Затем включите это в поиск result_log как другое поле.

Никогда не полагайтесь на идентификаторы автоматического увеличения, одинаковые в разных таблицах.

+0

Я подумал об этом, но что, если пользователь А вставит в таблицу search_log, а затем, прежде чем я могу запросить последний идентификатор вставки, пользователь В вставит в таблицу search_log. Возможно, у меня есть два пользователя с одинаковым поисковым кодом? – user387049

+2

Вы не запрашиваете последний идентификатор вставки, это функция MySQL. Он возвращает идентификатор вставки для последней вставки в вашем сеансе. –