我有一個簡單的MySQL表和主索引(id)不是一個一個編號(1,31,35,100等)。我想讓它們像(1,2,3,4)一樣被編號。請告訴我該怎麼做。我還想指出,我意識到這次手術可能帶來的後果,但我只想整理一下這張桌子。如何重新編號主索引
回答
我同意其他方法將工作,但我只是給一個不同的想法。這將做沒有任何臨時表創建要求::
SET @i=0;
UPDATE table_name SET column_name=(@i:[email protected]+1);
-1:這不回答這個問題。如果您刪除自動增量值爲2的行,那麼您在ID中有一個洞。這是他想改變的。 – dbemerlin 2010-04-15 07:38:19
但是你不能阻止整體,因爲你允許刪除你的記錄。因此,創建一個新表格只會暫時幫助 – 2010-04-15 07:46:21
CREATE TABLE newtable
LIKE oldtable
SELECT NULL, col1, col2, col3, etc FROM oldtable;
,而不包括主鍵列在選擇,但所有其他列。
而主鍵列應該在表格中第一位,或者您需要將NULL
設置爲主鍵列的位置。列應該有一個「NOT NULL」設置。否則它將被設置爲空,這是毫無意義的。
這個工作的原因是因爲MySQL喜歡忽略auto_increments上的NULL插入,而是爲它創建一個新的數字(假定null不是該列上的有效值)。
- 刪除「id」列。
- 使用自動增量創建名爲id的列(並且不允許爲空值),它將具有所需的新值。
- 將此新的「id」列指定爲PK。
感謝意見後編輯。
一次只能有一個自動增量列,所以如果你想遵循這個配方,你可以做一個捷徑:1.刪除舊列。 2.做一個新的。 – 2010-04-15 07:37:25
是的,我忘記了。 – Numenor 2010-04-15 15:14:50
最簡單的解決辦法是:
- 重命名錶tablename_temp
- 與舊名稱和相同的結構創建一個新表
- INSERT INTO表名(ID,字段1,字段2,字段3) SELECT NULL,field1,field2,field3,... FROM tablename_temp;
- DROP tablename_temp
如果您正在使用外鍵,我強烈建議你離開的ID,因爲它們是這會破壞您的所有數據。數據庫不是不整潔的,因爲主鍵不是按順序排列的,如果數據庫的參照完整性(指向其他表中錯誤或不存在的行的ID值)被破壞,則數據庫是不整潔的。
給一個嘗試重新編號dalmp的方法(DALMP Database Abstraction Layer for MySQL using PHP.)
$db->renumber('table','uid');
基本上它這樣做:
SET @var_name = 0;
UPDATE Tablename SET ID = (@var_name := @var_name +1);
ALTER TABLE tablename AUTO_INCREMENT = 1
奇妙的@tareco,這是完美的一個不同但相似的問題,當你想從一個SQL轉儲到一個表中導入記錄,並找到衝突的主鍵值。我在導入之前在目標表上運行了你的sql命令,並且它完美地工作。 – AdamJones 2014-09-05 02:53:14
你不不需要它。主鍵不是一個數字。這只是無意義的獨特序列。
- 1. 如何重新計算主索引?
- 2. 如何跟蹤輔助索引編號
- 3. 如何重新索引新關鍵字
- 4. JSON重新編碼打印數組索引?我重新編碼
- 5. 如何從elasticsearch中的索引獲取索引id編號
- 6. 在PlayOrm中重新編制索引
- 7. Magento重新編制索引問題
- 8. .htaccess:不需要重新編寫索引
- 9. 對數組重新編制索引
- 10. 在mysql中重新編制索引
- 11. Elasticsearch何時重新索引?
- 12. 如何重新編號表列
- 13. 如何重新索引數組?
- 14. 如何重新索引AWS Elasticsearch?
- 15. 如何在xampp中重新索引magento2?
- 16. pandas.DataFrame - 如何按組重新索引?
- 17. 如何重新索引多列
- 18. 如何重新索引CtrlP Vim插件?
- 19. 如何用MultiIndex.from_product重新索引?
- 20. Elasticsearch重新索引
- 21. 查找索引編號
- 22. 如何添加索引並重新索引到現有屬性?
- 23. 如何重新索引Pandas Dataframe的列索引MultiIndex?
- 24. 如何重新索引默認的Mongo索引?
- 25. 如何在重新索引時避免丟棄現有索引
- 26. 重新索引重複行
- 27. 重新索引/刷新SectionIndexer
- 28. 刪除lucene索引並重新索引
- 29. 重新索引多索引問題
- 30. elasticsearch重新索引錯誤 - 重新索引從遠程
它不會重置auto_increment值,所以如果你的auto_increment是1344,更新後你只能得到id 100,下一行將會有id 1344,再次創建一個洞。 Ofc可以在更新後手動設置auto_increment。 – dbemerlin 2010-04-15 08:05:29
oFcourse你必須更新自動增量;我錯過了指定。 ALTER TABLE TABLENAME auto_increment =; – 2010-04-15 08:16:44
是啊,這是偉大的,但有一件事要考慮:重複編號 – 2016-11-07 03:01:05