整数类型用于保存没有小数部分的数值,例如年龄、数量、状态码、编号等。MySQL 提供了多种整数类型,主要区别在于占用空间和可表示的数值范围。
常见整数类型如下:
TINYINTSMALLINTMEDIUMINTINTBIGINT
通常遵循一个简单原则:能满足业务范围即可,不要盲目使用更大的类型。
TINYINT 占用 1 个字节,适合保存范围较小的整数。
常见场景:
- 性别
- 布尔状态
- 很小范围的枚举值
示例:
CREATE TABLE user_status (
id int NOT NULL AUTO_INCREMENT,
status tinyint NOT NULL DEFAULT 0 COMMENT '0禁用,1启用',
PRIMARY KEY (id)
);如果字段永远不会出现负数,可以配合 UNSIGNED 使用,获得更大的正数范围。
SMALLINT 占用 2 个字节,适合保存范围中等偏小的整数。
常见场景:
- 年份编号
- 库存数量较小的商品
- 区域编号、分类编号
示例:
CREATE TABLE course (
id int NOT NULL AUTO_INCREMENT,
course_no smallint unsigned NOT NULL,
PRIMARY KEY (id)
);MEDIUMINT 占用 3 个字节,介于 SMALLINT 和 INT 之间。
它在很多业务里不如 INT 常见,但在一些对存储空间敏感、同时数据量又超过 SMALLINT 范围的场景里仍然有价值。
示例:
CREATE TABLE city_stat (
id int NOT NULL AUTO_INCREMENT,
population mediumint unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);INT 是最常用的整数类型,占用 4 个字节,适合绝大多数业务编号和计数字段。
常见场景:
- 用户 ID
- 订单 ID
- 浏览次数
- 商品数量
示例:
CREATE TABLE article (
id int unsigned NOT NULL AUTO_INCREMENT,
title varchar(100) NOT NULL,
view_count int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);如果不确定用哪种整数类型,INT 通常是最稳妥的默认选择。
BIGINT 占用 8 个字节,适合非常大的整数范围。
常见场景:
- 超大规模主键 ID
- 雪花算法 ID
- 金额分单位后的超大整数存储
- 高并发日志流水号
示例:
CREATE TABLE order_log (
id bigint unsigned NOT NULL AUTO_INCREMENT,
order_no bigint unsigned NOT NULL,
PRIMARY KEY (id)
);当数据量可能达到数十亿级时,主键通常会优先考虑 BIGINT。
整数类型的核心差别在于“范围”和“空间”。范围够用即可,过大只会浪费存储;过小则可能溢出。业务里最常见的是 TINYINT、INT 和 BIGINT。