Skip to content

表格

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)可存英文数可存中文数物理占用空间 (固定)说明
latin110 个❌ 不支持10 字节 ($10 \times 1$)单字节编码,无法存中文
gbk10 个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