在MySQL中使用INSERT
語句,很容易爲主鍵輸入AUTO_INCREMENT
值。 UPDATE
聲明有這樣的功能嗎?自動遞增更新查詢ID或序列號
我想象什麼是表像這樣:
users
userid username password email ... unique_updated_id
用戶每次更新的東西在users
表中,unique_updated_id
將包含MAX(unique_updated_id)+1
。這將用於與數據庫同步的系統中。它會記住它收到的最後一個unique_updated_id
,並在從服務器獲取更新時將其返回。
因此,當用戶更改他們在數據庫中的信息時,他們的unique_updated_id
將更新爲SELECT MAX(unique_updated_id)+1 FROM users
。這將告訴同步過程只有在指定的unique_updated_id
之後更新的信息纔會被髮送。
但是,我擔心的是,由於一個可能的競爭條件下,我可能無法與
UPDATE users SET email='[email protected]',unique_updated_id=(SELECT MAX(unique_updated_id)+1 FROM users) WHERE userid=1;
達到預期的行爲如何確保unique_updated_id
將永遠是獨一無二的,將有連續編號的所有UPDATE
和INSERT
查詢?
我試圖在PHP中實現這一點,所以執行由分號分隔的查詢似乎不是解決方案,以確保兩個查詢可以連續執行而不需要在其間執行其他查詢。
好表可以有一個以上的主鍵。爲什麼你不能攻擊auto_increment unique_updated_id –
難道這只是在衝突的情況下返回錯誤?假設3個查詢同時運行:QUERY1設置UUI = 10,QUERY2設置UUI = 10,QUERY3設置UUI = 10。當QUERY2和QUERY3執行時,這不會僅僅返回錯誤嗎? –
那麼,服務器上的請求會排隊,因此它會按收到的順序處理它們並相應地更新它們。這就是爲什麼自己做這件事更可靠。儘管有更多SQL經驗的人可以提供更好的洞察力。 –