2017-04-12 53 views
0

後解釋到底發生了什麼:確保多個請求處理一個其他

外部服務發送帶有XML數據的HTTP POST請求的PHP腳本。這個腳本檢查數據是否已經存在於MySQL數據庫中。如果不是,則插入新記錄。

現在出現了第二個用於故障安全的服務。它將完全相同的XML數據發送到PHP腳本。

問題:

的腳本已經檢查,如果記錄存在。但是,這些請求幾乎在同一時間發生,並且腳本被並行調用。所以具有相同數據的兩個請求的數據都被插入。

我想過使用一個隊列,但我無法想象一個簡單的方法來做到這一點。整個過程其實很簡單。

確保不插入數據兩次的最簡單方法是什麼?

+0

使用唯一鍵和INSERT ON插入語句的DUPLICATE KEY UPDATE形式。對於http請求,無法確保收到的訂單。 –

+0

使用交易。 – Barmar

+0

我不認爲交易會改變任何東西,但唯一的鑰匙會 - 我想。我會嘗試清理數據庫並添加UNIQUE鍵。 – Michael

回答

0

爲您的事務生成一個散列,使其在數據庫級別獨一無二。如果你嘗試兩次添加相同的數據,MySQL會拋出什麼?