当我们在MySQL列上使用AUTO_INCREMENT时,序列号总是从默认值1或我们指定的值开始以升序递增。
因此,MySQL不允许将AUTO_INCREMENT值更改为小于当前序列号的值。通过以下示例可以理解-
在此示例中,假设我们有一个名为“ emp1”的表,并在创建表时将AUTO_INCREMENT VALUE指定为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; Records: 2 Duplicates: 0 Warnings: 0 mysql> Insert into emp1(name) values('Aryan'); 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; Records: 3 Duplicates: 0 Warnings: 0 mysql> Insert into emp1(name) values('Daksh'); mysql> Insert into emp1(name) values('Yashraj'); mysql> Select * from emp1; +-----+---------+ | id | NAME | +-----+---------+ | 100 | Sohan | | 101 | Harshit | | 102 | Aryan | | 108 | Daksh | | 109 | Yashraj | +-----+---------+ 5 rows in set (0.00 sec)