Tóm tắt
MySQL cho phép chèn giá trị rõ ràng vào cột AUTO_INCREMENT miễn là giá trị đó chưa tồn tại và không vi phạm PRIMARY KEY/UNIQUE. Giá trị AUTO_INCREMENT tiếp theo sẽ được điều chỉnh tự động.
Ví dụ
1. Tạo bảng
CREATE TABLE InsertValueInAutoIncrement (
UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName VARCHAR(20)
);
2. Chèn dữ liệu混合 (tự động + thủ công)
INSERT INTO InsertValueInAutoIncrement (UserName) VALUES ('John'); -- UserId = 1
INSERT INTO InsertValueInAutoIncrement (UserName) VALUES ('Carol'); -- UserId = 2
INSERT INTO InsertValueInAutoIncrement (UserName) VALUES ('Sam'); -- UserId = 3
INSERT INTO InsertValueInAutoIncrement (UserName) VALUES ('Bob'); -- UserId = 4
INSERT INTO InsertValueInAutoIncrement (UserId, UserName) VALUES (100, 'Maxwell'); -- UserId = 100
INSERT INTO InsertValueInAutoIncrement (UserName) VALUES ('James'); -- UserId = 101
INSERT INTO InsertValueInAutoIncrement (UserId, UserName) VALUES (1000, 'Larry'); -- UserId = 1000
3. Kết quả
+--------+----------+
| UserId | UserName |
+--------+----------+
| 1 | John |
| 2 | Carol |
| 3 | Sam |
| 4 | Bob |
| 100 | Maxwell |
| 101 | James |
| 1000 | Larry |
+--------+----------+
Quy tắc quan trọng
- Giá trị chèn thủ công phải duy nhất (không trùng khóa chính).
- Sau khi chèn giá trị lớn (1000),
AUTO_INCREMENTtiếp theo sẽ là 1001. - Không thể chèn NULL vào cột
NOT NULL AUTO_INCREMENT(sẽ tự sinh giá trị). - Dùng
ALTER TABLE ... AUTO_INCREMENT = 1để reset counter (chỉ khi bảng rỗng hoặc giá trị mới lớn hơn max hiện tại).
Ứng dụng thực tế
- Nhập dữ liệu legacy có ID cố định.
- Gộp dữ liệu từ nhiều nguồn với ID không trùng nhau.
- Khôi phục bản sao dữ liệu giữ nguyên khóa chính.