AUTO INCREMENT 鍵
placeholderCopyCREATE 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_offset
和auto_increment_increment
。 - 可以使用其他東西作為
PRIMARY KEY
並簡單地做INDEX(id)
。 (在某些情況下這是一種優化。) - 使用
AUTO_INCREMENT
作為“PARTITION
鍵”很少有益; 做點不同的事。 - 各種操作可能會 燃燒值。當它們預先分配值,然後不使用它們時會發生這種情況:
INSERT IGNORE
(帶有 dup 鍵),REPLACE
(這是DELETE
plusINSERT
)和其他。ROLLBACK
是導致 ID 出現空白的另一個原因。 - 在複製中,你不能信任 ID 以升序到達從站。雖然 id是按連續順序分配的,但 InnoDB 語句以
COMMIT
順序傳送給 slave。