我有一個資源表(可以說汽車),我想自動聲明。然後我需要關於我剛纔聲稱的資源的信息。如何使用mysql中的UPDATE自動聲明一行或資源
如果有每一個用戶資源的極限,我可以做下面的技巧:
UPDATE cars SET user = 'bob' WHERE user IS NULL LIMIT 1
SELECT * FROM cars WHERE user = 'bob'
這樣,我要求原子資源,然後我可以看到哪一行我只是聲稱。
當'bob'可以聲明多輛車時,這不起作用。我意識到我可以得到一份已經被bob聲稱的汽車列表,聲稱另一個,然後SELECT
再次看看發生了什麼變化,但這感覺hackish。
我想知道的是,有沒有什麼方法可以查看哪些行我剛更新了我的上一次更新?
如果失敗了,是否還有其他一些技巧來自動聲明一行?我真的想避免使用SERIALIZABLE
隔離級別。如果我做這樣的事情:
1 SELECT id FROM cars WHERE user IS NULL
2 <here, my PHP or whatever picks a car id>
3 UPDATE cars SET user = 'bob' WHERE id = <the one i picked>
會REPEATABLE READ
這裏就夠了嗎?換句話說,我能保證一些其他交易不會聲稱我的軟件在第2步中選擇了哪一行嗎?
我發現這個:http://stackoverflow.com/questions/1821142/atomically-mark-and-return-a-group-of-rows-in-database,但它是詢問有關SQL服務器 - 我無法找到一個mySQL等效 – 2010-03-17 08:26:21