当我们更改小于当前序列号的 AUTO_INCREMENT 值时,MySQL 会返回什么?

mysqlmysqli database

当我们在 MySQL 列上使用 AUTO_INCREMENT 时,序列号总是从默认值 1 或我们指定的值开始按升序增加。

这就是原因,MySQL 不允许将 AUTO_INCREMENT 值更改为小于当前序列号的值。可以借助以下示例 − 来理解。

示例

在此示例中,假设我们有一个名为"emp1"的表,在创建表时,我们将 AUTO_INCREMENT 值指定为 100。因此,在表中插入值后,序列将从 100 开始,如以下查询的输出所示 −

mysql> Select * from emp1;
+-----+---------+
| id | NAME     |
+-----+---------+
| 100 | Sohan   |
| 101 | Harshit |
+-----+---------+
2 rows in set (0.00 sec)

现在,当我们尝试在 ALTER TABLE 查询的帮助下将 AUTO_INCREMENT 值更改为 90 时,MySQL 不会返回任何错误和警告,因为查询没有问题,但是当我们在表中插入新值时,MySQL 会将指定的 AUTO_INCREMENT 值与当前序列号进行比较。由于指定的 AUTO_INCREMENT 值 (90) 小于当前序列号 (101),因此 MySQL 从 102 开始累积新值,这可以从以下查询中观察到 −

mysql> ALTER TABLE EMP1 AUTO_INCREMENT = 90;
Query OK, 2 rows affected (0.31 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> Insert into emp1(name) values('Aryan');
Query OK, 1 row affected (0.08 sec)

mysql> Select * from emp1;
+-----+---------+
| id  | NAME    |
+-----+---------+
| 100 | Sohan   |
| 101 | Harshit |
| 102 | Aryan   |
+-----+---------+
3 rows in set (0.00 sec)

相反,如果我们尝试将 AUTO_INCREMENT 更改为高于当前序列号的值,则 MySQL 将开始从指定值累积新值。

为了在表"emp1"中更清楚地说明,我们将 AUTO_INCREMENT 值更改为 108,高于当前序列号,因此 MySQL 开始从指定的 AUTO_INCREMENT 值(即从 108 开始)累积新插入的值。

mysql> ALTER TABLE EMP1 AUTO_INCREMENT = 108;
Query OK, 3 rows affected (0.30 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> Insert into emp1(name) values('Daksh');
Query OK, 1 row affected (0.04 sec)

mysql> Insert into emp1(name) values('Yashraj');
Query OK, 1 row affected (0.06 sec)

mysql> Select * from emp1;
+-----+---------+
| id  | NAME    |
+-----+---------+
| 100 | Sohan   |
| 101 | Harshit |
| 102 | Aryan   |
| 108 | Daksh   |
| 109 | Yashraj |
+-----+---------+
5 rows in set (0.00 sec)

相关文章