表格
sql
CREATE TABLE 表名 (
字段名 数据类型 [约束],
字段名 数据类型 [约束],
...
);sql
CREATE TABLE user (
id INT,
name VARCHAR(50),
age INT
);数据类型
数值
| 类型 | 说明 |
|---|---|
| INT | 整数 |
| BIGINT | 大整数 |
| DECIMAL(10,2) | 精确小数 |
| FLOAT / DOUBLE | 浮点数 |
sql
# 最多 10 位数,其中 2 位小数
price DECIMAL(10,2)字符串
| 类型 | 说明 | 最大长度 |
|---|---|---|
| VARCHAR(n) | 可变长度字符串(常用) | 65,535 字节 |
| CHAR(n) | 固定长度字符串 | 255 字符 |
| TEXT | 长文本 | 4GB |
CHAR是“固定长度”的。
如果你定义了 CHAR(10),无论你存 1 个字符还是 10 个字符,它在物理磁盘上永远占据 10 个字符 的空间。无论是英文还是中文,都是10个字符。虽然能存的“个数”一样,但在磁盘上占用的 字节 (Bytes) 是不一样的。这取决于字符集的编码规则:
| 字符集 (Character Set) | 可存英文数 | 可存中文数 | 物理占用空间 (固定) | 说明 |
|---|---|---|---|---|
| latin1 | 10 个 | ❌ 不支持 | 10 字节 ($10 \times 1$) | 单字节编码,无法存中文 |
| gbk | 10 个 | 10 个 | 20 字节 ($10 \times 2$) | 双字节编码,中文占 2 字节 |
utf8 (alias utf8mb3) | 10 个 | 10 个 | 30 字节 ($10 \times 3$) | 旧版 UTF8,最大支持 3 字节 |
| utf8mb4 (推荐) | 10 个 | 10 个 | 40 字节 ($10 \times 4$) | 支持 Emoji,最大支持 4 字节 |
VARCHAR是“按需分配”的。n代表的是最大字符数限制。TEXT:专门用于存储大段文字。
日期
| 类型 | 说明 | 示例 |
|---|---|---|
| DATE | 年月日 | YYYY-MM-DD |
| DATETIME | 年月日时分秒 | YYYY-MM-DD HH:MM:SS |
| TIMESTAMP | 时间戳 | YYYY-MM-DD HH:MM:SS |
DATETIME虽然和TIMESTAMP长的一样,但是TIMESTAMP会受时区影响。在不同服务器时区下,TIMESTAMP 读出来会不同。如果数据库时区变了,它显示的时间会自动调整。
如果只需要记录年月日时,可以使用DATE
企业中一般使用
DATETIME,用于记录绝对的时间点TIMESTAMP存在2038年问题,应该避免使用
约束
主键
sql
id INT PRIMARY KEY自增
sql
id INT PRIMARY KEY AUTO_INCREMENT非空
sql
name VARCHAR(50) NOT NULL默认值
sql
status INT DEFAULT 1唯一
sql
email VARCHAR(100) UNIQUE