首页/数据/SQL 速查/CREATE TABLE 建表要点
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条
变更与事务52 条
性能与执行计划72 条

CREATE TABLE 建表要点

建表时把主键、约束、字符集、引擎一次定清楚:MySQL 常用 InnoDB + utf8mb4;PostgreSQL 关注类型与约束表达。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
CREATE TABLE orders (
  id          BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  user_id     BIGINT UNSIGNED NOT NULL,
  amount      DECIMAL(12,2)   NOT NULL DEFAULT 0.00,
  status      TINYINT         NOT NULL DEFAULT 0,
  created_at  DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  KEY idx_user (user_id, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

PostgreSQL

PostgreSQL
CREATE TABLE orders (
  id          bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  user_id     bigint        NOT NULL,
  amount      numeric(12,2) NOT NULL DEFAULT 0,
  status      smallint      NOT NULL DEFAULT 0,
  created_at  timestamptz   NOT NULL DEFAULT now()
);
CREATE INDEX idx_orders_user ON orders (user_id, created_at);
MySQL显式 ENGINE=InnoDB 与 CHARSET=utf8mb4;主键与二级索引在表内声明
PostgreSQLIDENTITY 替代 serial;索引通常独立 CREATE INDEX
通用主键必建;金额用 DECIMAL/NUMERIC;时间列带默认值

易错点

  • 不写字符集依赖服务器默认值:老实例默认可能是 latin1,新库与旧库混用后中文/emoji 直接出错
  • 自增主键用 BIGINT 起步避免增长后改类型;INT UNSIGNED 也有被写满的场景(如流水号)

数据来源与参考

  • MySQL 8.0 Reference Manual · CREATE TABLE
  • PostgreSQL Documentation · CREATE TABLE
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌