回答
你不能。您可以得到的最接近的是truncate table
,這將丟棄表並重新創建它,這意味着您將丟失其中的所有數據,並且ID計數器重置爲0.除此之外,ID將始終從最後插入的記錄中增加1 ,不管這個記錄是否存在。當然,你可以編寫一個查詢來修復所有當前的ID,但是在下一次插入時,它仍然會產生一個新的差距。更重要的是:如果沒有間隙的連續排序是你想要的,那麼自動增量ID不是實現這個目的的正確方法。添加另一個int字段,您可以手動跟蹤此排序。
你說的重新排序主鍵是什麼意思?如果你說你想讓主鍵取20而不是21,那麼我擔心你不能這麼做。
所有你能做的,是刪除主鍵約束,然後更改21到20年,重新回到主鍵約束
不要混淆主鍵。他們不應該改變,你不應該在你的應用中使用它們來添加表格。
如果您需要無間隙索引,請添加一個新列,並在插入/移除時相應地更新此列。這聽起來像是對你無用的工作,但它會在以後爲你節省很多痛苦。
因此,如果我的應用程序中不應該使用主鍵來進行除了連接表之外的任何操作,那麼在我的應用程序中,我應該如何引用特定的文本,以便在數據庫中查找特定的文本不同語言的文本/句子?我需要使用密鑰才能查看文本。 – HelloGoodbye 2017-10-19 11:23:19
@HelloGoodbye您需要定義一個業務密鑰。在這種情況下,它應該是標識翻譯的東西。我正在使用strings/VARCHAR。該值使用點來創建名稱空間。我有像「app.welcome.message」這樣的固定鍵和「stock.name.4731」這樣的動態鍵,其中「4731」是「股票」表中的主鍵。 – 2017-11-06 13:11:56
啊,所以你使用更多的符號名稱的方法,而不是整個代碼中使用看似隨意的整數?聰明! – HelloGoodbye 2017-11-06 20:38:04
如果您關心的主鍵值足夠多,以致此類值不受歡迎,那麼您首先不應該使用自動編號主鍵。
帶有自動編號鍵的整個觀點就是你說「只要關鍵是獨一無二的,我真的不關心它的價值。」
大衛是正確的關於不使用主鍵索引等。
如果您只需要更改一次特定的主鍵值(我在遷移過程中有時會這樣做),您當然可以設置identity_insert並使用insert insert來複制該行,然後刪除原來的值。
對於再造一個排序順序或用作您的應用程序,你可以使用下面的存儲過程索引的列:
CREATE PROCEDURE [dbo].[OrganizeOrderConfirmationMessages]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sortOrder INT;
SET @sortOrder = 0;
-- // Create temporary table
CREATE TABLE #IDs(ID INT, SortOrder INT)
-- // Insert IDs in order according to current SortOrder
INSERT INTO #IDs SELECT ocm.ID, 0 FROM OrderConfirmationMessages ocm ORDER BY ocm.SortOrder ASC
-- // Update SortOrders
UPDATE #IDs SET SortOrder = @sortOrder, @sortOrder = @sortOrder + 10
-- // Update the "real" values with data from #IDs
UPDATE OrderConfirmationMessages SET SortOrder = x2.SortOrder
FROM #IDs x2 WHERE OrderConfirmationMessages.ID = x2.ID
END
結果:
SortOrders的例子會從1,2 ,5,7,10,24,36至10,20,30,40,50,60,70
其實你可以。
如果行有足夠的獨特數據和您使用phpMyAdmin
- 與主ID
- READD與主鍵和自動遞增列啓用刪除列。
現在,它的使用!
該死Intelligent..smart辦法第一章 – khandelwaldeval 2014-05-06 11:19:05
試試這個:
UPDATE tbl SET catid = (SELECT COUNT(*) FROM tbl t WHERE t.catid <= tbl.catid);
您可能還需要重新思考/重新設計。在刪除一行時重新編號整個表似乎不太實際或不必要。
你應該放棄了「CATID」字段,然後重新創建它,將其設置爲初級和檢查自動遞增複選框,這將增加新的領域,並填補了數字。
首先從表中刪除主鍵列在你的phpmyadmin的SQL中─ ALTER TABLE 'your_tablename' 運行這個命令添加 '列名' BIGINT NOT NULL AUTO_INCREMENT首先,添加PRIMARY KEY ( '列名'(10) );
這將自動地從0,1等等安排在數列。
試試這個:
SET @var:= 0; UPDATE table
SET id
=(@ var:= @ var + 1); ALTER TABLE table
AUTO_INCREMENT = 1;
- 1. 以sqllite重新排序AutoIncrement主鍵
- 2. 重新排列主鍵
- 3. 重新排序用作排序子句的主鍵列
- 4. 主鍵排序
- 5. 重新排列mysql中的主鍵
- 6. 按主鍵排序
- 7. 排序主鍵JDBC
- 8. 如何重新排序表
- 9. 如何重新排序NSMutableDictionaries
- 10. InnoDB如何排序多列主鍵
- 11. 在sqlalchemy中重新排序複合主鍵
- 12. 如何(不是鍵)sequently重新排列
- 13. 在wordpress主題中重新排序
- 14. PHP數組的鍵重新排序
- 15. 的Python odict:重新排序鍵
- 16. 重新排序基於特定鍵值
- 17. SortedDictionary項目鍵位置重新排序
- 18. 重新排序gnuplot鍵條目
- 19. php array重新排序鍵值
- 20. 如何使用jQuery的排序重新排序排序父
- 21. Grails的主鍵排序
- 22. 重新排序
- 23. 重新啓動主鍵
- 24. 如何重新排序搜索結果?
- 25. 如何重新排序列在qplot(R)
- 26. 如何重新排序活動
- 27. 如何重新排序SQL查詢?
- 28. PyQt - 如何重新實現QAbstractTableModel排序?
- 29. 如何重新排序PHAssetCollection列表
- 30. Php - 如何重新排序日期
爲什麼?有什麼關鍵的是有一個關鍵= 19,然後一個關鍵= 21? – 2009-11-30 09:15:32