不,你不能假设。ID 不连续的一种情况是在复制的多主机设置中。例如,如果在这样的设置中存在两台服务器,一台只会生成偶数自动 ID,而另一台只会生成奇数 ID(请记住,这只是一个示例)。
但是,如果您的设置不是这样,那么可以。至少在 InnoDB 中,插入是原子的,并且在针对同一个表时会排队,因此来自两个不同 INSERT 的 ID 不会交错。(虽然它没有记录,所以依赖它......有点冒险)
我如何测试 IGNORE INSERT ID 生成:
mysql> CREATE TABLE `ignoreinsert` (
-> `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
-> `uq` int(10) unsigned NOT NULL,
-> PRIMARY KEY (`ID`),
-> UNIQUE KEY `uq` (`uq`)
-> ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.19 sec)
mysql> INSERT INTO ignoreinsert VALUES (null,1),(null,2);
Query OK, 2 rows affected (0.10 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM ignoreinsert;
+----+----+
| ID | uq |
+----+----+
| 1 | 1 |
| 2 | 2 |
+----+----+
2 rows in set (0.00 sec)
mysql> INSERT IGNORE INTO ignoreinsert VALUES (null,3),(null,1),(null,4),(null,2),(null,5);
Query OK, 3 rows affected (0.08 sec)
Records: 5 Duplicates: 2 Warnings: 0
mysql> SELECT * FROM ignoreinsert;
+----+----+
| ID | uq |
+----+----+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
+----+----+
5 rows in set (0.00 sec)