Cú pháp
Sử dụng ALTER TABLE để đặt giá trị auto_increment tiếp theo:
ALTER TABLE ten_bang AUTO_INCREMENT = gia_tri_moi;
Ví dụ chi tiết
1. Tạo bảng với AUTO_INCREMENT
mysql> CREATE TABLE changeCurrentAutoIncrementValue ( -> CurrentCount INT AUTO_INCREMENT, -> PRIMARY KEY(CurrentCount) -> ); Query OK, 0 rows affected (0.60 sec)
2. Chèn 4 bản ghi (tự động 1,2,3,4)
mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES(); Query OK, 1 row affected (0.20 sec) mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES(); Query OK, 1 row affected (0.15 sec) mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES(); Query OK, 1 row affected (0.11 sec) mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES(); Query OK, 1 row affected (0.12 sec)
3. Kiểm tra giá trị hiện tại
mysql> SELECT * FROM changeCurrentAutoIncrementValue;
+--------------+ | CurrentCount | +--------------+ | 1 | | 2 | | 3 | | 4 | +--------------+ 4 rows in set (0.00 sec)
4. Đổi AUTO_INCREMENT thành 300
mysql> ALTER TABLE changeCurrentAutoIncrementValue AUTO_INCREMENT = 300; Query OK, 0 rows affected (0.27 sec) Records: 0 Duplicates: 0 Warnings: 0
5. Chèn thêm 3 bản ghi
mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES(); Query OK, 1 row affected (0.15 sec) mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES(); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES(); Query OK, 1 row affected (0.15 sec)
6. Kết quả cuối cùng
mysql> SELECT * FROM changeCurrentAutoIncrementValue;
+--------------+ | CurrentCount | +--------------+ | 1 | | 2 | | 3 | | 4 | | 300 | | 301 | | 302 | +--------------+ 7 rows in set (0.00 sec)
Quan trọng: Giá trị AUTO_INCREMENT là giá trị TIẾP THEO
- Set = 300 → Giá trị insert tiếp theo là 300
- Không thể set giá trị nhỏ hơn hoặc bằng max hiện tại
- Nếu set 10 khi max là 4 → Lỗi hoặc bị bỏ qua
Các trường hợp sử dụng phổ biến
Reset sau khi TRUNCATE (muốn bắt đầu từ 1000)
TRUNCATE TABLE ten_bang; ALTER TABLE ten_bang AUTO_INCREMENT = 1000;
Merge dữ liệu từ nhiều server (tránh trùng ID)
-- Server 1: IDs 1-1000000 -- Server 2: Set AUTO_INCREMENT = 2000000 trước khi insert
Sau khi xóa hàng loạt, muốn dọn dẹp ID (KHÔNG khuyến khích)
-- Chỉ làm nếu hiểu rủi ro FK, reference ALTER TABLE ten_bang AUTO_INCREMENT = 1; -- Chỉ tác dụng nếu bảng rỗng
Kiểm tra giá trị AUTO_INCREMENT hiện tại
SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'ten_database' AND TABLE_NAME = 'ten_bang';
Lưu ý
- Chỉ áp dụng cho cột
AUTO_INCREMENT(thường là PRIMARY KEY) - Không ảnh hưởng đến dữ liệu hiện có
- Khóa bảng ngắn hạn (metadata lock)
- Replication: Cần cẩn thận với master-slave