2011-05-22 150 views
2

如何在不使字段本身自動遞增的情況下複製自動遞增Id字段的功能?我想在我的INSERT語句中,我需要以某種方式獲取創建的最後一個ID,並在新條目上添加+1。但我不知道如何。任何幫助表示讚賞。使我自己遞增的mysql id不自動增量

編輯:我結束了ypercube的建議,並保持id字段作爲autoincrementing並使我的搜索字符串唯一。謝謝!

+3

不是明智的做法 - 高競爭條件風險 – 2011-05-22 21:54:58

+0

您可以使用'trigger'。當在表上完成「插入」時,它可以將'new.id'設置爲'max(所有以前的id)+ 1'。但是正如OMG安全地建議的那樣,只能做到這一點,而不是生產。參與完成數據庫應該做的事情的風險。 – 2011-05-22 21:56:11

+0

嗯,我需要另一個字段作爲我的主鍵,並且任何自動遞增字段都必須設置爲關鍵字,這就是爲什麼我無法使用Id自動遞增的原因。 – Michael 2011-05-22 21:56:21

回答

1

您需要在一個查詢中選擇最高當前ID,然後在使用第二個查詢插入時使用該ID。

爲了避開比賽的條件,你可以創建一個表鎖(討厭)或使用交易(更好,但不理想)

+0

這本質上非常糟糕。它只有在以下情況下才有效:1)事務是SERIALIZIABLE [它要求使用兩個語句的事務*;自動提交吮吸] 2)可以跳過密鑰,因爲事務可能被回滾。 – 2011-05-22 22:01:21