AUTO INCREMENT 鍵

CREATE TABLE (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ...
    PRIMARY KEY(id),
    ...  );

主要說明:

  • 如果未在 INSERT 上指定它,則自動以 1 開始並自動遞增 1,或將其指定為 NULL
  • ID 總是彼此不同,但……
  • 除了在任何給定時刻唯一之外,不要對 id 的值做任何假設(沒有間隙,連續生成,不重用等)。

微妙的筆記:

  • 在重啟伺服器時,’next’值被’計算’為 MAX(id)+1
  • 如果關閉或崩潰之前的最後一個操作是刪除最高 id,可以重用該 id (這取決於引擎)。所以,不要相信 auto_increments 永久唯一 ; 它們在任何時刻都是獨一無二的。
  • 有關多主或叢集解決方案,請參閱 auto_increment_offsetauto_increment_increment
  • 可以使用其他東西作為 PRIMARY KEY 並簡單地做 INDEX(id)。 (在某些情況下這是一種優化。)
  • 使用 AUTO_INCREMENT 作為“PARTITION 鍵”很少有益; 做點不同的事。
  • 各種操作可能會 燃燒值。當它們預先分配值,然後不使用它們時會發生這種情況:INSERT IGNORE(帶有 dup 鍵),REPLACE(這是 DELETE plus INSERT)和其他。ROLLBACK 是導致 ID 出現空白的另一個原因。
  • 在複製中,你不能信任 ID 以升序到達從站。雖然 id​​是按連續順序分配的,但 InnoDB 語句以 COMMIT 順序傳送給 slave。