没有尝试过这一点,但我怀疑你可以 https://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html如果“为AUTO_INCREMENT列指定任何值,因此MySQL自动分配的序列号。您也可以明确分配0到列生成的序列号,除非NO_AUTO_VALUE_ON_ZERO启用SQL模式“ 如果您确实指定了一个值,那么mysql将接受它(只要它不会导致主键错误),并且随后的插入将在没有指定的情况下正常递增。因此,如果您希望这样做,完全可能会造成不连续性。
例如
ariaDB [sandbox]> DROP TABLE IF EXISTS T;
Query OK, 0 rows affected (0.11 sec)
MariaDB [sandbox]> CREATE TABLE T (ID INT AUTO_INCREMENT PRIMARY KEY, VAL VARCHAR(3));
Query OK, 0 rows affected (0.17 sec)
MariaDB [sandbox]>
MariaDB [sandbox]> INSERT INTO T (ID,VAL) VALUES (3,'AAA');
Query OK, 1 row affected (0.02 sec)
MariaDB [sandbox]> INSERT INTO T (ID,VAL) VALUES (2,'CCC');
Query OK, 1 row affected (0.02 sec)
MariaDB [sandbox]> INSERT INTO T (ID,VAL) VALUES(1,'BBB');
Query OK, 1 row affected (0.04 sec)
MariaDB [sandbox]>
MariaDB [sandbox]> INSERT INTO T (VAL) VALUES ('DDD');
Query OK, 1 row affected (0.04 sec)
MariaDB [sandbox]>
MariaDB [sandbox]> INSERT INTO T (ID,VAL) VALUES (10,'EEE');
Query OK, 1 row affected (0.01 sec)
MariaDB [sandbox]>
MariaDB [sandbox]> INSERT INTO T (VAL) VALUES ('FFF');
Query OK, 1 row affected (0.02 sec)
MariaDB [sandbox]>
MariaDB [sandbox]> SELECT * FROM T;
+----+------+
| ID | VAL |
+----+------+
| 1 | BBB |
| 2 | CCC |
| 3 | AAA |
| 4 | DDD |
| 10 | EEE |
| 11 | FFF |
+----+------+
6 rows in set (0.00 sec)
当我问到插入/更新的索引为0那么发生了什么?为什么它会创建一个新行而不是给我一个错误? – GoldenJoe
我认为它忽略了你试图插入的值,只是分配一个新行。 – Difster