Khi dùng AUTO_INCREMENT trên cột MySQL, số dãy luôn tăng theo thứ tự tăng dần bắt đầu từ giá trị mặc định 1 hoặc từ giá trị chúng ta chỉ định.
Đó là lý do MySQL không cho phép thay đổi giá trị AUTO_INCREMENT thành giá trị nhỏ hơn số dãy hiện tại. Có thể hiểu qua ví dụ sau:
Ví dụ
Trong ví dụ này, giả sử chúng ta có bảng 'emp1' và khi tạo bảng chỉ định AUTO_INCREMENT VALUE = 100. Do đó sau khi chèn giá trị, dãy số sẽ bắt đầu từ 100 trở đi như thấy từ kết quả truy vấn sau:
mysql> SELECT * FROM emp1; +-----+---------+ | id | NAME | +-----+---------+ | 100 | Sohan | | 101 | Harshit | +-----+---------+ 2 rows in set (0.00 sec)
Bây giờ khi thử thay đổi AUTO_INCREMENT thành 90 bằng ALTER TABLE, MySQL không báo lỗi hay cảnh báo vì cú pháp đúng, nhưng khi chèn giá trị mới, MySQL so sánh giá trị AUTO_INCREMENT chỉ định với số dãy hiện tại. Vì giá trị chỉ định (90) nhỏ hơn số dãy hiện tại (101), MySQL bắt đầu gán giá trị mới từ 102 trở đi, như thấy từ các truy vấn sau:
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)
Ngược lại, nếu thay đổi AUTO_INCREMENT thành giá trị lớn hơn số dãy hiện tại, MySQL sẽ bắt đầu gán từ giá trị chỉ định.
Để rõ hơn, trong bảng 'emp1' ta đổi AUTO_INCREMENT = 108 (lớn hơn số dãy hiện tại), do đó MySQL bắt đầu gán giá trị mới chèn từ 108 trở đi.
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)