我的問題類似於: Ignoring locked row in a MySQL query 除了我已經實現了一個接近接受答案中建議的邏輯。我的問題是如何最初設置進程ID。所有的服務器運行一個查詢像(代碼是在Ruby on Rails的,但所產生的MySQL查詢是):在mysql更新中跳過鎖定行以避免鎖定超時
UPDATE (some_table) SET process_id=(some process_id) WHERE (some condition on row_1) AND process_id is null ORDER BY (row_1) LIMIT 100
現在發生的事情是所有進程嘗試更新同一行,他們被鎖定,他們超時等待鎖。我希望服務器忽略被鎖定的行(因爲在釋放鎖之後,process_id將不再爲空,所以在這裏沒有任何意義)。 我可以嘗試隨機化一批記錄進行更新,但問題是我想優先根據row_1更新,如上面的查詢。 所以我的問題是,是否有辦法在MySQL中檢查一條記錄是否被鎖定,如果它是忽略它?
我想知道如果這些調用之間的狀態發生了變化。這種情況經常發生在現實世界的數據庫中。 – gelmanet 2015-07-02 11:38:07