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。