Mysql
從偏移量中為 id 賦值的優點和缺點是什麼?(例如:100,200,1000)
主要是,每個人都使用
int
數據類型或其變體tinyint
,smallint
並為其數據庫表的欄位mediumint
生成唯一值。id
我看到了很多問題,問到具體為訂單
How to start auto-increment from a value (offset) ?
表生成 id 時,我覺得每個人都想從偏移量開始。因此,在這種情況下,我的問題是:
- 它更像是一種商業規則嗎?如果是這樣,在生成數字時業務規則如何有意義?
- 如果這是個人的決定,那麼在決定從偏移量分配 id 的值時可能要考慮的因素是什麼?
- 為什麼不從1
ids
開始所有 id 以及從開始分配的需要是offset
什麼?它解決了什麼問題?這樣做的優點和缺點是什麼?
您可能需要偏移量的原因有多種。請注意,其中一些原因不一定是良好的 DBA 實踐。
- 正如 dnoeth 所提到的,您的主鍵可能會用於其他一些業務流程,例如訂單號。在這種情況下,您不希望您的客戶認為他們只是第 11 個訂單!訂單號 1100011 會好得多。
- 您可能有一個處於只讀模式的舊系統。它包含您所有的老客戶和他們的主鍵,您希望新系統從它停止的地方繼續。
- 同樣的想法,你知道你將在未來的某個時候導入某個值的 PKS,所以你從你知道不會引起衝突的那些開始。
就個人而言,我唯一一次抵消是為了避免PK衝突。當然,有一次我年輕的時候,雖然從 PK ID 10000 開始很酷,但那是很久以前的事了。
真的,這樣做沒有缺點。除了數據類型之間的一些名義空間問題以及可能失去將 PK 分配到數據類型限制的能力之外,數據庫並不關心它是從 1 還是 1,000,000 開始的。它將對它進行索引。
您不應該相信
AUTO_INCREMENT
價值觀遵循任何模式的原因有很多。他們只保證在任何時候都是獨一無二的。有一種特殊情況可能對您的應用程序是致命的。如果刪除最高的id,然後重啟mysql,那個id可能會被重用。
另請參閱更多注意事項
如果您想以特定模式建構 id,則必須擁有 id 列的所有權。並且要小心——
ROLLBACK
可能會絆倒你。多個連接可能是一個問題。回到你的問題(如果我沒有嚇到你的話)……
ALTER TABLE foo AUTO_INCREMENT=200;
另見變數
auto_increment_offset
和auto_increment_increment
。(它們旨在用於多主複製。)手動序列:參考手冊中有一個很好的範例。(在該頁面中搜尋“序列”。)