MySQL 数据类型大全 + 表结构设计规范

🧠 MySQL 数据类型大全 + 表结构设计规范


📘 一、MySQL 数据类型分类总览

MySQL 中的数据类型主要分为以下几大类:

类型类别 示例 常见用途
数值类型 INT, FLOAT, DECIMAL 存储数字、金额、计数
字符串类型 CHAR, VARCHAR, TEXT 存储文字、描述、备注
日期时间类型 DATE, TIME, DATETIME, TIMESTAMP 存储日期、时间信息
布尔类型 BOOLEAN, TINYINT(1) 存储真假(0 或 1)
二进制类型 BLOB, VARBINARY 存储图片、文件等二进制数据
JSON 类型 JSON 存储结构化或嵌套数据

🔢 二、数值类型详解

类型 字节 取值范围(有符号) 示例 说明
TINYINT 1 -128 ~ 127 TINYINT(1) 常用于布尔值(0/1)
SMALLINT 2 -32,768 ~ 32,767 SMALLINT 小范围整数
MEDIUMINT 3 -8,388,608 ~ 8,388,607 较少使用
INT 4 -2,147,483,648 ~ 2,147,483,647 INT AUTO_INCREMENT 常用于主键
BIGINT 8 超大整数 常用于ID或统计数
FLOAT 4 小数点后约7位精度 FLOAT(10,2) 不建议用于金额
DOUBLE 8 小数点后约15位精度 高精度计算
DECIMAL(M,D) 可变 精确小数 DECIMAL(10,2) 用于金额、财务

🧩 示例:

CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    total_price DECIMAL(10,2) NOT NULL,
    discount_rate FLOAT(4,2) DEFAULT 0.0
);

🔤 三、字符串类型详解

类型 最大长度 示例 特点
CHAR(n) 固定 n 字节 CHAR(10) 定长,速度快但浪费空间
VARCHAR(n) 可变长度 VARCHAR(255) 节省空间,推荐使用
TEXT 65,535 字节 存储大段文字
MEDIUMTEXT 16 MB 长文本,如日志
LONGTEXT 4 GB 超大文本,如文档内容

🧩 示例:

CREATE TABLE users (
    username VARCHAR(50) NOT NULL,
    bio TEXT
);

🕒 四、日期与时间类型

类型 示例值 说明
DATE '2025-10-16' 仅日期
TIME '15:30:00' 仅时间
DATETIME '2025-10-16 15:30:00' 常用于业务记录
TIMESTAMP '2025-10-16 07:30:00' 自动记录时间,可用于更新时间
YEAR '2025' 仅年份

🧩 示例:

CREATE TABLE events (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100),
    start_time DATETIME,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

🧮 五、布尔与枚举类型

类型 示例 说明
BOOLEAN TRUE / FALSE 实际为 TINYINT(1)
ENUM ENUM('male','female','other') 性别、状态等有限值
SET SET('a','b','c') 可多选的字符串集合

🧩 示例:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    gender ENUM('male','female','other') DEFAULT 'other',
    active BOOLEAN DEFAULT TRUE
);

🧱 六、JSON 与二进制类型

类型 示例 用途
JSON '{"key": "value"}' 存储结构化数据
BLOB 二进制大对象 存图片、文件
VARBINARY(n) 二进制字符串 通常用于哈希或加密值

🧩 示例:

CREATE TABLE configs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    settings JSON,
    file_hash VARBINARY(64)
);

⚙️ 七、表结构设计规范

1. 命名规范

项目 规范示例
数据库名 小写+下划线,如 company_db
表名 小写+复数,如 users, orders
字段名 小写+下划线,如 user_id, created_at
主键 一般命名为 id
外键 user_id, order_id
索引 idx_字段名
唯一索引 uniq_字段名

2. 字段设计建议

  • ✅ 字段应根据实际长度合理选择类型
    • 例如:状态字段可用 TINYINT
    • 用户名长度不超过 50,用 VARCHAR(50)
  • ⚠️ 避免使用 TEXT 类型作为索引字段
  • ✅ 金额、计数要使用 DECIMAL
  • ⚙️ 时间戳字段推荐:
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    

3. 主键与索引设计

类型 推荐策略
主键 使用自增 INTBIGINT
外键 若性能要求高,可逻辑约束代替外键约束
索引 经常用于 WHERE 的字段添加索引
唯一索引 防止重复数据,如 email

🧩 示例:

CREATE TABLE orders (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    order_no VARCHAR(50) UNIQUE,
    total_price DECIMAL(10,2) NOT NULL,
    status TINYINT DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_user_id (user_id)
);

🧩 八、实战建表示例

CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    gender ENUM('male','female','other') DEFAULT 'other',
    age TINYINT UNSIGNED,
    hire_date DATE,
    salary DECIMAL(10,2) DEFAULT 0.00,
    department_id INT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_dept_id (department_id),
    FOREIGN KEY (department_id) REFERENCES departments(id)
);

✅ 九、总结

主题 要点
类型选择 优先用最小可满足需求的类型
字符串 VARCHAR 优于 CHAR
金额 用 DECIMAL 避免浮点误差
时间 DATETIME + TIMESTAMP 自动更新时间
规范 小写命名,逻辑清晰,字段含义明确

🧠 建议:
定期复盘数据库设计,确保字段命名一致性、索引合理性、类型匹配性。
优秀的数据库结构 = 性能 + 可维护性。

posted @ 2025-10-16 16:17  灰灰奋斗录  阅读(9)  评论(0)    收藏  举报