Mysql

從偏移量中為 id 賦值的優點和缺點是什麼?(例如:100,200,1000)

  • August 3, 2016

主要是,每個人都使用int數據類型或其變體tinyintsmallint並為其數據庫表的欄位mediumint生成唯一值。id

我看到了很多問題,問到具體為訂單How to start auto-increment from a value (offset) ?表生成 id 時,我覺得每個人都想從偏移量開始。

因此,在這種情況下,我的問題是:

  1. 它更像是一種商業規則嗎?如果是這樣,在生成數字時業務規則如何有意義?
  2. 如果這是個人的決定,那麼在決定從偏移量分配 id 的值時可能要考慮的因素是什麼?
  3. 為什麼不從1ids開始所有 id 以及從開始分配的需要是offset什麼?它解決了什麼問題?這樣做的優點缺點是什麼?

您可能需要偏移量的原因有多種。請注意,其中一些原因不一定是良好的 DBA 實踐。

  1. 正如 dnoeth 所提到的,您的主鍵可能會用於其他一些業務流程,例如訂單號。在這種情況下,您不希望您的客戶認為他們只是第 11 個訂單!訂單號 1100011 會好得多。
  2. 您可能有一個處於只讀模式的舊系統。它包含您所有的老客戶和他們的主鍵,您希望新系統從它停止的地方繼續。
  3. 同樣的想法,你知道你將在未來的某個時候導入某個值的 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_offsetauto_increment_increment。(它們旨在用於多主複製。)

手動序列:參考手冊中有一個很好的範例。(在該頁面中搜尋“序列”。)

引用自:https://dba.stackexchange.com/questions/145622