Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách thay đổi giá trị AUTO_INCREMENT hiện tại trong MySQL


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