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