Giá trị tối đa của cột AUTO_INCREMENT phụ thuộc vào kiểu dữ liệu integer được chọn. Dưới đây là bảng giới hạn chi tiết:
Bảng giới hạn AUTO_INCREMENT theo kiểu dữ liệu
| Kiểu dữ liệu | Dấu (Signed) | Giá trị tối đa | Giá trị tối đa (Unsigned) |
|---|---|---|---|
| TINYINT | 1 byte | 127 | 255 |
| SMALLINT | 2 bytes | 32,767 | 65,535 |
| MEDIUMINT | 3 bytes | 8,388,607 | 16,777,215 |
| INT / INTEGER | 4 bytes | 2,147,483,647 | 4,294,967,295 |
| BIGINT | 8 bytes | 9,223,372,036,854,775,807 | 18,446,744,073,709,551,615 |
Ví dụ: TINYINT đạt giới hạn
1. Tạo bảng với TINYINT AUTO_INCREMENT
CREATE TABLE LimitOfAutoIncrement (
Id TINYINT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(Id)
);
2. Chèn 127 bản ghi (giá trị max của TINYINT signed)
INSERT INTO LimitOfAutoIncrement VALUES (),(),(),(),(),(),(),(),(),(),
(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),
(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),
(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),
(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),();
3. Kiểm tra dữ liệu
SELECT * FROM LimitOfAutoIncrement;
Sẽ hiển thị Id từ 1 đến 127.
4. Thử chèn bản ghi thứ 128
INSERT INTO LimitOfAutoIncrement VALUES ();
Lỗi:
ERROR 1062 (23000): Duplicate entry '127' for key 'PRIMARY'
Lời khuyên chọn kiểu dữ liệu
| Ước lượng số bản ghi | Kiểu khuyên dùng |
|---|---|
| < 100 | TINYINT UNSIGNED (max 255) |
| < 65.000 | SMALLINT UNSIGNED (max 65.535) |
| < 16 triệu | MEDIUMINT UNSIGNED (max 16.7M) |
| < 4 tỷ | INT UNSIGNED (max 4.29B) - Phổ biến nhất |
| > 4 tỷ | BIGINT UNSIGNED |
Lưu ý quan trọng
- MySQL không tái sử dụng giá trị AUTO_INCREMENT đã xóa (gap không bị lấp lại)
- Khi đạt giới hạn, không thể chèn thêm → Cần ALTER TABLE đổi kiểu dữ liệu lớn hơn
- Mặc định INT là SIGNED. Dùng
INT UNSIGNEDđể gấp đôi dung lượng - Kiểm tra giá trị hiện tại:
SHOW TABLE STATUS LIKE 'ten_bang';(xem cột Auto_increment)