在 Linux 环境操作 MySQL 时,数据类型选错会导致存储浪费,约束漏加会引发数据混乱 ------ 而 PPT 第三章的核心表格,正是解决这些问题的 "操作指南"。本文将第三章的数值、字符串、日期时间类型表格及约束规则整理归纳,并结合 Linux 命令行实操,帮你从建表开始就避开数据坑。
一、MySQL 核心数据类型表格归纳(附 Linux 实操场景)
PPT 第三章用表格清晰划分了数据类型的范围、大小与用途,以下是整理后的核心表格,每个类型都标注了 Linux 下的典型使用场景,方便直接对照实操。
1. 数值类型表格(最常用类型 + Linux 适配建议)
数值类型的核心是 "按需选最小范围",避免像用bigint存年龄这样的资源浪费。Linux 下建表时,可直接参考此表选择类型:
表格
| 类型 | 大小 | 范围(有符号) | 范围(无符号) | Linux 下典型用途 | 避坑提示 |
|---|---|---|---|---|---|
| TINYINT | 1 Bytes | (-128, 127) | (0, 255) | 存年龄、性别(0 = 女,1 = 男)、状态值 | 存非负数据加UNSIGNED,如age TINYINT UNSIGNED |
| SMALLINT | 2 Bytes | (-32768, 32767) | (0, 65535) | 存班级人数、订单编号(小规模场景) | 不建议存手机号(长度不够),优先用字符串类型 |
| INT/INTEGER | 4 Bytes | (-2147483648, 2147483647) | (0, 4294967295) | 存用户 ID、商品 ID(支持自增AUTO_INCREMENT) |
Linux 下建主键首选,如id INT PRIMARY KEY AUTO_INCREMENT |
| BIGINT | 8 Bytes | (-9e18, 9e18) | (0, 1.8e19) | 存超大订单量、日志 ID(高并发场景) | 避免盲目使用,仅当INT不够时才用 |
| FLOAT | 4 Bytes | (-3.4e38, -1.17e-38)、0、(1.17e-38, 3.4e38) | 0、(1.17e-38, 3.4e38) | 存非精准数据(如商品重量估算值) | 不存金额(精度丢失),金额用DECIMAL |
| DOUBLE | 8 Bytes | (-1.8e308, -2.2e-308)、0、(2.2e-308, 1.8e308) | 0、(2.2e-308, 1.8e308) | 存科学计算数据(如温度、压力) | 精度高于FLOAT,但仍不适合财务场景 |
| DECIMAL(M,D) | M+2/D+2 | 依赖 M(总位数)和 D(小数位数) | 依赖 M 和 D | 存金额(如price DECIMAL(10,2)= 最大 99999999.99) |
Linux 下财务表必用,避免精度问题 |
Linux 实操示例:创建包含数值类型的商品表,直接套用表格推荐类型:
bash
运行
bash
# 登录MySQL后执行
CREATE DATABASE demo_db;
USE demo_db;
# 商品表:id用INT自增,价格用DECIMAL,库存用SMALLINT
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
price DECIMAL(10,2) NOT NULL, # 金额用DECIMAL
stock SMALLINT UNSIGNED NOT NULL, # 库存非负,用SMALLINT
weight FLOAT(6,2) # 重量估算用FLOAT
);
# 验证表结构(Linux终端查看类型是否正确)
DESC products;
2. 字符串类型表格(Linux 下编码适配 + 选择原则)
字符串类型的关键是区分CHAR(定长)和VARCHAR(变长),且要适配 Linux 下的 UTF-8 编码(1 个汉字 = 3 字节),表格整理如下:
表格
| 类型 | 大小范围 | 存储特点 | Linux 下典型用途 | 编码适配提示(UTF-8) |
|---|---|---|---|---|
| CHAR | 0-255 Bytes | 固定长度,不足补空格 | 存手机号(11 位)、身份证号(18 位) | 存 11 位手机号需CHAR(11)(33 字节足够) |
| VARCHAR | 0-65535 Bytes | 变长,按实际长度存储 | 存姓名(1-10 个汉字 = 3-30 字节)、地址 | 存姓名用VARCHAR(30)(支持 10 个汉字) |
| TINYTEXT | 0-255 Bytes | 短文本,无长度指定 | 存商品简短描述(如 "限时折扣") | 超过 255 字节用TEXT,避免截断 |
| TEXT | 0-65535 Bytes | 长文本 | 存商品详情、用户留言 | 不适合存超 64KB 的内容(如长文章),用MEDIUMTEXT |
| MEDIUMTEXT | 0-16777215 Bytes | 中等文本 | 存博客文章、订单备注 | Linux 下文件导入文本优先用此类型 |
| LONGTEXT | 0-4294967295 Bytes | 极大文本 | 存日志、长文档 | 避免频繁查询(性能低),优先拆分表 |
| TINYBLOB | 0-255 Bytes | 二进制短数据 | 存小图标、缩略图(极少用) | 二进制数据建议存在 Linux 服务器,表中存路径 |
Linux 实操避坑:创建用户表时,按表格选择字符串类型,适配 UTF-8 编码:
sql
bash
# 用户表:手机号用CHAR,姓名用VARCHAR,简介用TEXT
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
phone CHAR(11) UNIQUE NOT NULL, # 手机号固定11位,用CHAR
name VARCHAR(30) NOT NULL, # 姓名最多10个汉字,用VARCHAR(30)
intro TEXT # 个人简介用TEXT
) DEFAULT CHARSET=utf8mb4; # Linux下推荐utf8mb4(支持emoji)
3. 日期时间类型表格(Linux 时区适配 + 自动更新场景)
日期时间类型容易因 Linux 时区导致显示偏差,表格整理了各类型的范围、格式及 Linux 下的适配方案:
表格
| 类型 | 大小 | 范围 | 格式 | Linux 下典型用途 | 时区 / 自动更新提示 |
|---|---|---|---|---|---|
| DATE | 3 Bytes | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD | 存生日、商品生产日期 | 不涉及时区,适合固定日期 |
| TIME | 3 Bytes | -838:59:59 ~ 838:59:59 | HH:MM:SS | 存时长(如视频时长、会议时长) | 可存负数(如倒计时),注意范围限制 |
| YEAR | 1 Bytes | 1901 ~ 2155 | YYYY | 存年份(如毕业年份、产品上市年份) | 仅存年份时用,比DATE节省空间 |
| DATETIME | 8 Bytes | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 存订单创建时间、用户注册时间 | 不受 Linux 时区影响,需手动更新 |
| TIMESTAMP | 4 Bytes | 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07(UTC) | YYYY-MM-DD HH:MM:SS | 存数据最后更新时间(自动刷新) | 受 Linux 时区影响,支持ON UPDATE自动更新 |
Linux 实操关键 :利用TIMESTAMP实现数据自动更新,适配时区:
sql
bash
# 订单表:创建时间用DATETIME,更新时间用TIMESTAMP自动刷新
CREATE TABLE orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP, # 创建时间手动记录
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, # 自动更新
status VARCHAR(20) NOT NULL
);
# 测试自动更新(Linux终端执行后查看update_time变化)
INSERT INTO orders (status) VALUES ('待付款');
UPDATE orders SET status = '已付款' WHERE order_id = 1;
SELECT * FROM orders; # update_time会自动变为更新时间
二、约束规则与表格结合:Linux 下建表必加约束
PPT 第三章提到的 6 种约束(主键、唯一、非空等),需结合上述数据类型表格使用,才能保证数据规范。以下是 "数据类型 + 约束" 的 Linux 实操组合示例:
表格
| 约束类型 | 核心作用 | 适配数据类型 | Linux 下建表示例(结合表格类型) |
|---|---|---|---|
| PRIMARY KEY | 唯一标识行数据 | INT(自增)、CHAR(身份证) | id INT PRIMARY KEY AUTO_INCREMENT(用户表主键) |
| UNIQUE | 避免重复数据(非主键) | VARCHAR(邮箱)、CHAR(手机号) | email VARCHAR(100) UNIQUE(用户表邮箱唯一) |
| NOT NULL | 强制字段必填 | 所有类型(除 TEXT/BLOB) | name VARCHAR(30) NOT NULL(姓名必填) |
| DEFAULT | 字段不填时用默认值 | 数值、字符串、日期类型 | status VARCHAR(20) DEFAULT '正常'(用户状态默认正常) |
| FOREIGN KEY | 关联表数据(保证完整性) | INT(关联主键) | 订单表product_id INT FOREIGN KEY REFERENCES products(id) |
| CHECK | 自定义值规则 | 数值类型(年龄、金额) | age INT CHECK(age >= 18)(用户年龄≥18) |
Linux 完整建表示例:创建带约束的学生表,严格套用数据类型表格和约束规则:
sql
bash
# 学生表:id(INT自增主键)、email(VARCHAR唯一)、age(TINYINT非空+CHECK)
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
age TINYINT UNSIGNED NOT NULL CHECK(age >= 18), # 结合TINYINT和CHECK
clazz VARCHAR(20) NOT NULL,
join_date DATE DEFAULT CURRENT_DATE # 入学日期默认当前日期
);
# 验证约束效果(Linux终端测试插入非法数据)
INSERT INTO students (name, email, age, clazz) VALUES ('张三', 'zhangsan@test.com', 17, '文科一班');
# 会报3819错误(age=17不满足CHECK约束),成功拦截非法数据
三、Linux 下表格使用小贴士
-
快速查表 :在 Linux 终端中,忘记类型范围时,可直接查看 MySQL 帮助文档:
bash
运行
bashmysql -u root -p -e "HELP DATA TYPES;" # 查看所有数据类型帮助 -
编码适配 :创建数据库 / 表时,需指定
utf8mb4(支持 emoji 和特殊字符),避免 Linux 下中文乱码:sql
bashCREATE DATABASE demo_db DEFAULT CHARSET=utf8mb4; -
性能优化 :大表(千万级数据)避免用
TEXT/LONGTEXT,可将大文本存为 Linux 文件,表中仅存文件路径,提升查询速度。
通过归纳 PPT 第三章的核心表格,再结合 Linux 命令行实操,能从建表环节就选对数据类型、加对约束,彻底避免 "数据存不下""重复无法拦截" 等常见问题。建议将本文表格保存为 Linux 下的备忘录,建表时随时对照使用。