2010-10-14 123 views
0

我有一個webapp,當前將所有用戶的搜索存儲到search_log表中。我現在要創建另一個名爲results_log的表,其中存儲了我們提供給用戶的所有結果。 search_log表包含名爲id_search的主鍵,並且結果日誌表具有外鍵id_search和另一個字段id_result。 id_searched字段是兩個表中的auto_incrementing字段。MySQL插入競爭條件

在我的web應用程序,我會做插件在這個順序:

insert into search_log table 
    insert into result_log table 

我擔心這可能會導致競爭條件。如果用戶A和用戶B都完成web應用程序,並在大約同一時間到達這部分代碼,是有可能的是,爲了將去:

User A -> Insert into search_log 
    User B -> Insert into search_log 
    User B -> Insert into result_log 
    User A -> Insert into result_log 

由於兩個表上id_search場auto_incrementing,我很擔心用戶A和用戶B將交換數據。我也想過查詢id_search,但它似乎更糟糕的解決方案。

我的問題是: - 有沒有辦法解決這種競爭條件? - 一種解決方案可以通過一個SQL查詢插入到兩個表中嗎?這可能嗎?

回答

1

如果這些表格是相關的,那麼您應該在插入時包含自動增量ID。插入到search_log後,獲取最後一個插入ID,不需要查找。然後將其作爲另一個字段包含在result_log搜索中。

永遠不要依賴自動增量ID在不同的表中相同。

+0

我認爲這樣做,但如果用戶A插入到search_log表中,然後在可以查詢最後一個插入ID之前,用戶B將插入到search_log表中。我可以結束與兩個用戶具有相同的search_id權利? – user387049 2010-10-14 16:07:52

+2

你不會「查詢」最後一個插入ID,它是一個MySQL函數。它返回會話中最後一個插入的插入ID。 – 2010-10-15 20:54:38