簡體   English   中英

自動增加 MySql 中的主鍵

[英]Auto-increment a primary key in MySql

在 phpmyadmin 上使用 mysql 創建表的過程中,我總是發現主鍵及其自動增量存在問題。 當我在表中插入行時。 auto_increment 完美地為每個新行上的每個主鍵添加一個值 1。 但是當我刪除一行時,例如主鍵為“id = 4”的行,我在表中添加了一個新行。 新行中的主鍵的值是“id = 5”而不是“id = 4”。 它的行為就像舊行從未被刪除。

以下是 SQL 語句的示例:

CREATE TABLE employe(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30) NOT NULL
)

ENGINE = INNODB;

我如何找到解決此問題的方法?

謝謝你。

我很確定這是設計使然。 如果您的表中有最多 6 個 ID,並且您刪除了 ID 2,您是否希望下一個輸入的 ID 為 2? 這似乎不符合 ACID 屬性。 此外,如果依賴於該數據,例如,如果它是用戶數據,並且 ID 確定了用戶 ID,它將使預先存在的信息無效,因為如果用戶 X 被刪除並且相同的 ID 被分配給用戶 Y ,這可能會導致相關系統出現完整性問題。

另外,想象一個有 500 億行的表。 每次您嘗試插入新記錄時,表是否應該運行 O(n) 搜索最小的缺失 ID? 我可以看到這種情況很快就會失控。

您可能想閱讀的一些鏈接:

你為什么在乎?

主鍵是內部行標識符,不應該是性感或好看的。 只要他們能夠唯一地識別每一行,他們就可以達到他們的目的。

現在,如果您關心它的值,那么您可能希望在某處公開主鍵值,這是一個很大的危險信號。 如果您需要一個外部的、可見的標識符,您可以使用您想要的任何格式序列和值創建一個輔助列。

附帶說明一下,術語AUTO_INCREMENT有點誤導。 這並不意味着它們一直在增加。 這只是意味着它會嘗試產生連續的數字,只要有可能。 在多線程應用程序中,這通常是不可能的,因為批次或編號是為每個線程保留的,因此行插入序列可能實際上不遵循自然編號結束。 行刪除具有類似的效果,以及帶有回滾的INSERT

主鍵用於將表連接在一起和建立索引,它們不適合人類使用。 重新排序主鍵列可能會孤立數據並破壞您的查詢。

提示:在您的表中添加另一列,並根據需要對該列重新排序(向您的用戶顯示該列而不是主鍵)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM