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_offset
和auto_increment_increment
。 - 可以使用其他东西作为
PRIMARY KEY
并简单地做INDEX(id)
。 (在某些情况下这是一种优化。) - 使用
AUTO_INCREMENT
作为“PARTITION
键”很少有益; 做点不同的事。 - 各种操作可能会 燃烧值。当它们预先分配值,然后不使用它们时会发生这种情况:
INSERT IGNORE
(带有 dup 键),REPLACE
(这是DELETE
plusINSERT
)和其他。ROLLBACK
是导致 ID 出现空白的另一个原因。 - 在复制中,你不能信任 ID 以升序到达从站。虽然 id是按连续顺序分配的,但 InnoDB 语句以
COMMIT
顺序发送给 slave。