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

Giới hạn AUTO_INCREMENT theo kiểu dữ liệu integer trong MySQL

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ệuDấu (Signed)Giá trị tối đaGiá trị tối đa (Unsigned)
TINYINT1 byte127255
SMALLINT2 bytes32,76765,535
MEDIUMINT3 bytes8,388,60716,777,215
INT / INTEGER4 bytes2,147,483,6474,294,967,295
BIGINT8 bytes9,223,372,036,854,775,80718,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 ghiKiểu khuyên dùng
< 100TINYINT UNSIGNED (max 255)
< 65.000SMALLINT UNSIGNED (max 65.535)
< 16 triệuMEDIUMINT 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)