我有一個帶有自動增量id字段的MySQL表。當我刪除一行然後插入一個新行時,我刪除的行的id被跳過,新獲得的id比前一行大。有什麼辦法可以防止這種情況發生?我希望新的一排替換舊的。有沒有一個重要的原因,爲什麼這種情況我失蹤了?防止在MySQL ID字段中出現空白
1
A
回答
0
自動增量字段的定義是每插入一個新行都保證獲得唯一值。如果你想保留舊值,那麼你必須更新行而不是替換它。如果您的設計要求自動增量列值保持連續,那麼您將不得不自己管理它。
+0
'UPDATE' =='REPLACE'? – 2009-12-24 04:51:29
+0
不,我在刪除原文的意義上使用了「替換」一詞,並添加了新的一行。 – 2009-12-24 04:52:43
0
對不起,但我不知道確切的原因。
AFAIK你不能避免這種行爲,除非你在TRUNCATE
表或明確指定id。
1
MySQL的自動遞增功能永遠不會倒退,除非你強制它。有一個很好的理由。如果有遺漏的記錄(日誌,表格等等),那該怎麼辦?
您可以使用此命令強制:
ALTER TABLE tbl AUTO_INCREMENT = 1000;
或者,如果你需要做它作爲查詢的一部分:
LOCK TABLES tbl WRITE;
SELECT @id := MAX(id) FROM tbl;
INSERT INTO tbl SET [email protected], ...;
UNLOCK TABLES;
如果你正使用InnoDB,你可以這樣做這在交易中取而代之...
但是,最好不要這樣做。
相關問題
- 1. 防止在文本字段中創建空白字符?
- 2. 防止有空標籤出現無字
- 3. 防止PHP搜索表單中的空白字段
- 4. MySQL SELECT空白字段
- 5. jqgrid custom_func不執行空白字段,不能防止空白記錄
- 6. 防止在表中插入空白行
- 7. 的Javascript防止前空白字符
- 8. MySQL,在域中輸入ê-like符號而不會出現空白字段
- 9. 如何防止網頁表單提交空白字段
- 10. 防止寫入NULL或空白到字段
- 11. 如何防止使用JavaScript的空白字段?
- 12. 防止XmlBeans修剪空白
- 13. 防止Wysiwyg空白輸入
- 14. 防止eclipse刪除空白
- 15. 防止多字表單字段PHP MySQL
- 16. 如何防止在將文本粘貼到輸入字段時出現空格?
- 17. 如何防止在SQL Server中自動添加空白字符?
- 18. 防止div填補空白空間?
- 19. 阻止表單發送空白字段
- 20. Android webview空白片段時出現
- 21. parseInt空白字段
- 22. 如何防止將空白數據插入到MySQL表中?
- 23. 防止提交輸入字段爲空
- 24. 如何在使用側邊欄滾動時防止出現空白?
- 25. 離開字段空白時出現PHP格式錯誤
- 26. 空白頁出現在cakephp
- 27. 如何防止ReSharper在我的MSpec字段之間插入空白行?
- 28. MySQL:字段中的空白字符實際上不是空白。它是什麼?
- 29. 防止XSLT在文件末尾的空白輸出線1.0
- 30. 如何防止在datagridview中的空白空間vb.net
你正試圖在這裏的雷區挖洞。風險是併發性錯誤,其確切性質取決於您的應用程序。自動遞增ID實際上是免費的(當然,它們可以溢出,但暫且擱置)。只要接受序列中會有差距並繼續前進。 – Asaph 2009-12-24 04:52:39
基本上,你要求做的是讓2個記錄共享相同的主鍵;一個剛創建的記錄和另一個剛剛被刪除的記錄。想象一下,您的網站用戶在被刪除之前打開了一個引用刪除記錄的頁面,並創建了新記錄。想象一下,這個用戶然後提交一個更新到刪除的記錄。在正確設計的應用程序中,下一步應該發生的情況是更新失敗,因爲記錄已被刪除。相反,新記錄會使用已刪除記錄的數據進行更新。 – Asaph 2009-12-24 05:14:53