Linux 下 MySQL 数据类型与约束:第三章核心表格归纳与实战应用

在 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 下表格使用小贴士

  1. 快速查表 :在 Linux 终端中,忘记类型范围时,可直接查看 MySQL 帮助文档:

    bash

    运行

    bash 复制代码
    mysql -u root -p -e "HELP DATA TYPES;"  # 查看所有数据类型帮助
  2. 编码适配 :创建数据库 / 表时,需指定utf8mb4(支持 emoji 和特殊字符),避免 Linux 下中文乱码:

    sql

    bash 复制代码
    CREATE DATABASE demo_db DEFAULT CHARSET=utf8mb4;
  3. 性能优化 :大表(千万级数据)避免用TEXT/LONGTEXT,可将大文本存为 Linux 文件,表中仅存文件路径,提升查询速度。

通过归纳 PPT 第三章的核心表格,再结合 Linux 命令行实操,能从建表环节就选对数据类型、加对约束,彻底避免 "数据存不下""重复无法拦截" 等常见问题。建议将本文表格保存为 Linux 下的备忘录,建表时随时对照使用。

相关推荐
陈桴浮海7 小时前
【Linux&Ansible】学习笔记合集三
linux·运维·云原生·ansible
czlczl200209257 小时前
增删改查时如何提高Mysql与Redis的一致性
数据库·redis·mysql
打工的小王7 小时前
MySql(二)索引
数据库·mysql
yuanmenghao7 小时前
Linux 性能实战 | 第 10 篇 CPU 缓存与内存访问延迟
linux·服务器·缓存·性能优化·自动驾驶·unix
EnglishJun8 小时前
Linux系统编程(二)---学习Linux系统函数
linux·运维·学习
luoluoal8 小时前
基于python的医疗问句中的实体识别算法的研究(源码+文档)
python·mysql·django·毕业设计·源码
VekiSon8 小时前
Linux内核驱动——设备树原理与应用
linux·c语言·arm开发·嵌入式硬件
怣508 小时前
MySQL子查询实战指南:数据操作(增删改查)与通用表达式
数据库·chrome·mysql
Trouvaille ~8 小时前
【Linux】进程间关系与守护进程详解:从进程组到作业控制到守护进程实现
linux·c++·操作系统·守护进程·作业·会话·进程组