當我們修改 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)

更新時間: 2020年6月20日

78 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.