数据类型
数据类型定义了列能存什么、占多少空间、能做什么运算。选对类型,查询快、存储省;选错了,浪费空间还容易出错。
数值类型:
| 类型 | 范围 | 用途 |
|---|---|---|
TINYINT | -128 ~ 127 | 年龄、状态码 |
INT | -21亿 ~ 21亿 | 主键、数量 |
BIGINT | 超大整数 | 订单号、流水号 |
DECIMAL(M,D) | 精确小数 | 金额(工资、价格) |
FLOAT/DOUBLE | 近似小数 | 科学计算 |
字符串类型:
| 类型 | 特点 | 用途 |
|---|---|---|
CHAR(N) | 定长,最多 255 | 固定长度编码 |
VARCHAR(N) | 变长,最多 65535 | 姓名、地址、商品名 |
TEXT | 长文本,最多 65535 | 文章、备注 |
LONGTEXT | 超长文本 | 日志、全文 |
日期时间类型:
| 类型 | 格式 | 用途 |
|---|---|---|
DATE | YYYY-MM-DD | 入职日期、合同日期 |
DATETIME | YYYY-MM-DD HH:MM:SS | 订单时间、日志时间 |
TIMESTAMP | 时间戳(自动更新) | 记录创建/修改时间 |
以飞翔科技为例。各表的列类型选择:
-- 员工表:工资用 DECIMAL 保证精度
CREATE TABLE employees (
emp_id INT,
emp_name VARCHAR(50),
basic_salary DECIMAL(10,2), -- 精确到分
performance_bonus DECIMAL(10,2),
join_year INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 商品表:价格用 DECIMAL
CREATE TABLE products (
product_id INT,
product_name VARCHAR(100),
price DECIMAL(8,2), -- 最高 999999.99
stock INT,
shop_name VARCHAR(50)
);
金额字段一律用 DECIMAL 而不是 FLOAT——FLOAT 有精度误差,0.1 + 0.2 可能不等于 0.3,财务数据绝不能用。