MySQL logo

在创建数据表之前,必须先了解 MySQL 的数据类型——选对类型,事半功倍!

一、数值类型

整数类型

类型存储空间取值范围(有符号)用途
TINYINT1 字节-128 ~ 127年龄、状态码
SMALLINT2 字节-32768 ~ 32767小范围计数
MEDIUMINT3 字节-8388608 ~ 8388607中等范围
INT4 字节-21亿 ~ 21亿最常用整数
BIGINT8 字节±922亿亿超大数字
CREATE TABLE example_int (
    age TINYINT UNSIGNED,     -- 0~255,适合年龄
    user_id INT UNSIGNED,     -- 无符号自增ID
    population BIGINT         -- 人口数
);

浮点与定点数

类型说明示例
FLOAT(M,D)单精度浮点数FLOAT(7,4)
DOUBLE(M,D)双精度浮点数DOUBLE(10,2)
DECIMAL(M,D)定点数(精确)DECIMAL(10,2) 适合金额
注意 重要:涉及金额、价格等精确计算时,必须使用 DECIMAL,不要用 FLOATDOUBLE,否则会出现精度丢失!

二、字符串类型

类型最大长度说明
CHAR(N)255 字符固定长度,效率高
VARCHAR(N)65535 字节可变长度,节省空间
TEXT65535 字节长文本内容
MEDIUMTEXT16MB中长文本
LONGTEXT4GB超大文本
CREATE TABLE example_string (
    username VARCHAR(50),        -- 用户名(可变)
    gender CHAR(1),              -- 性别(固定长度)
    bio TEXT,                    -- 个人简介
    email VARCHAR(100)
);

CHAR vs VARCHAR 怎么选?

场景推荐
固定长度(手机号、身份证)CHAR
长度变化大(用户名、标题)VARCHAR
超过 255 字符TEXT

三、日期时间类型

类型格式范围用途
DATEYYYY-MM-DD1000~9999生日、日期
TIMEHH:MM:SS-838~838 小时时间段
DATETIMEYYYY-MM-DD HH:MM:SS1000~9999最常用
TIMESTAMPYYYY-MM-DD HH:MM:SS1970~2038自动更新
YEARYYYY1901~2155年份
CREATE TABLE example_date (
    birthday DATE,                    -- 生日
    created_at DATETIME DEFAULT NOW(),  -- 创建时间
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  -- 自动更新时间
);
提示 TIMESTAMP 会自动转换为 UTC 存储,而 DATETIME 不转换。跨时区应用建议用 TIMESTAMP

四、创建数据表完整示例

-- 创建用户表
CREATE TABLE users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
    password VARCHAR(255) NOT NULL COMMENT '密码哈希',
    email VARCHAR(100) NOT NULL COMMENT '邮箱',
    age TINYINT UNSIGNED DEFAULT 0 COMMENT '年龄',
    gender ENUM('男','女','保密') DEFAULT '保密' COMMENT '性别',
    balance DECIMAL(10,2) DEFAULT 0.00 COMMENT '账户余额',
    status TINYINT DEFAULT 1 COMMENT '状态: 1=正常, 0=禁用',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    INDEX idx_email (email),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';

关键约束说明

约束作用
PRIMARY KEY主键,唯一标识一条记录
NOT NULL不允许为空
UNIQUE值必须唯一
DEFAULT设置默认值
AUTO_INCREMENT自动递增
COMMENT字段注释(强烈建议写上!)
INDEX索引,加速查询

五、修改表结构

-- 添加字段
ALTER TABLE users ADD COLUMN phone VARCHAR(20) AFTER email;

-- 修改字段类型
ALTER TABLE users MODIFY COLUMN age TINYINT UNSIGNED NOT NULL DEFAULT 18;

-- 重命名字段
ALTER TABLE users CHANGE COLUMN phone mobile VARCHAR(20);

-- 删除字段
ALTER TABLE users DROP COLUMN mobile;

-- 查看表结构
DESC users;

-- 查看建表语句
SHOW CREATE TABLE users;

六、ENGINE 存储引擎

InnoDB(推荐)

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
特性InnoDBMyISAM
事务支持×
行级锁×
外键约束×
崩溃恢复×
全文索引√ 8.0+
现代开发一律使用 InnoDB,MyISAM 只在特定只读场景下考虑。

本篇小结

√ 学会了 MySQL 的三大数据类型(数值、字符串、日期时间)
√ 掌握了 CHAR vs VARCHAR 的选择策略
√ 学会了创建规范的数据表
√ 理解了约束、索引、存储引擎的概念

下一篇我们将学习 数据的增删改查(CRUD)操作