Mysql不规则Auto_Increment递增

Mysql Irregular Auto_Increment increment

table如下。有趣的是,Auto_Increment 的 'id' 列正在不规则地增加并且很高。


SELECT * FROM `numbers_api` ORDER BY `id` DESC

 id         |  email                |  name
--------------------------------------------
  562984864 | bla[at]blabla.com     |  test
  562956541 | bla1[at]blabla.com    |  test1
  562944637 | bla2[at]blabla.com    |  test2
  562944634 | bla3[at]blabla.com    |  test3

Table id 的结构:

我正在对这个 table 执行插入操作,如下所示(循环中的 $Querys[]):

$Querys[] = "INSERT IGNORE INTO numbers_api (email, name) VALUES ('" . $customerEmail . "', '" . $name . "');";

$this->db->query(implode("\r\n", $Querys));

emailname 或它们的组合可能有唯一索引。

每次您尝试插入一行时,都会创建一个 ID。但只有当 INSERT IGNORE 成功时,即没有违反唯一约束时,才会使用此 ID。

create table numbers_api (id int auto_increment, email varchar(100), name varchar(100));

create unique index idx on table numbers_api (email, name);

INSERT IGNORE INTO numbers_api (email, name) VALUES ('A', 'A');

INSERT IGNORE INTO numbers_api (email, name) VALUES ('A', 'A');
INSERT IGNORE INTO numbers_api (email, name) VALUES ('B', 'B');

INSERT IGNORE INTO numbers_api (email, name) VALUES ('A', 'A');
INSERT IGNORE INTO numbers_api (email, name) VALUES ('B', 'B');
INSERT IGNORE INTO numbers_api (email, name) VALUES ('C', 'C');

table 将有三行:

id email name
1 A A
3 B B
6 C C

因为在 A|A 上的第二次插入失败,因此浪费了 ID 2,并且在插入第一个 B|B 后尝试插入 A|A 和 B|B 也失败,浪费了 ID 4 和 5。

演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=ca09b5c09ed10116bf27d83935f3e608