当我们修改 AUTO_INCREMENT 值为小于当前序列号的值时,MySQL 会返回什么?
当我们在 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)
广告