Để có phạm vi AUTO_INCREMENT rất lớn (gần như "vô hạn" đối với ứng dụng thực tế), sử dụng kiểu BIGINT (8 bytes,signed: ±9.22 quintillion).
Cú pháp
ten_cot BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY;
Ví dụ minh họa
Tạo bảng với BIGINT PK:
mysql> CREATE TABLE LargeAutoIncrement (
-> Id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
-> );
Chèn từ giá trị gần max của BIGINT (9.223.372.036.854.775.807):
mysql> INSERT INTO LargeAutoIncrement VALUES(9223372036854775805); mysql> INSERT INTO LargeAutoIncrement VALUES(); mysql> INSERT INTO LargeAutoIncrement VALUES();
Kết quả tự động tăng:
+---------------------+ | Id | +---------------------+ | 9223372036854775805 | | 9223372036854775806 | | 9223372036854775807 | +---------------------+
So sánh các kiểu số cho PK
| Kiểu | Kích thước | Max UNSIGNED | Max SIGNED |
|---|---|---|---|
| TINYINT | 1 byte | 255 | 127 |
| SMALLINT | 2 bytes | 65,535 | 32,767 |
| MEDIUMINT | 3 bytes | 16.7M | 8.3M |
| INT | 4 bytes | 4.29B | 2.14B |
| BIGINT | 8 bytes | 18.44Q | 9.22Q |
Lưu ý:
- BIGINT tốn 8 bytes/giá trị (vs 4 bytes INT)
- Index BIGINT lớn hơn, chậm hơn một chút
- Đủ dùng cho 99.9% ứng dụng: INT UNSIGNED (4.29 tỷ) đã rất lớn
- Chỉ dùng BIGINT khi thực sự cần > 4 tỷ bản ghi