2016-02-18 72 views
0

我有一個數據庫,它包含我的應用程序的測試用例,我想同時運行幾個進程。現在它看起來像這樣mysql在同一時間選擇和更新

SELECT * FROM tests WHERE status = 0 LIMIT 20; 

,我想改變這一切20條記錄爲狀態「2」(正在處理),以避免情況另一個進程也採用相同的數據以進行測試。是否有可能在一個查詢中?


編輯:
我想運行假設在同一時間20個進程,他們都做同樣的,但我不想讓他們在同一個數據的工作 - 這就是爲什麼我要首先 - 從狀態= 0的數據庫中獲得20條記錄,同時爲狀態= 20的所有20條記錄設置狀態= 2 - >對來自這20條記錄的每條記錄設置適當的狀態來處理它們 - 回到開頭

用這種方式我會避免兩種不同的進程會從數據庫中獲取相同數據的情況

+0

你想更新20條記錄嗎?另一件事,我無法理解 –

+1

請提供表結構和示例數據。 你想更新表並從同一個表中選擇? – Pallavi

+1

[更新並在一個查詢中進行選擇]的可能重複(http://stackoverflow.com/questions/4057244/update-and-select-in-one-query) –

回答

0

您可以使用以下方式:

UPDATE 
    tests t1, 
    (SELECT `id` FROM tests WHERE `status` = 0 LIMIT 0,20) t2 
SET t1.`status` = 2 
WHERE 
    t1.`id` = t2.`id`