SQL DDL与CREATE TABLE
SQL分为DDL(数据定义语言)、DML(数据操作语言)和DCL(数据控制语言)。其中DDL的核心就是创建表的CREATE TABLE语句。
基本语法
CREATE TABLE 表名 (
列名 数据类型 [约束],
...
[表级约束]
);
常用数据类型
VARCHAR(n): 可变长字符串TEXT: 大文本INTEGER: 整数DECIMAL(p, s): 精确小数(用于金额)TIMESTAMPTZ: 带时区时间戳UUID: 唯一标识符BOOLEAN: 布尔值
主要约束
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
status VARCHAR(20) DEFAULT 'active',
created_at TIMESTAMPTZ DEFAULT NOW()
);
PRIMARY KEY: 主键,唯一且非空NOT NULL: 禁止NULL值UNIQUE: 禁止重复值DEFAULT: 设置默认值CHECK: 值范围限制
外键约束
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
total_amount DECIMAL(15, 2) NOT NULL,
CONSTRAINT fk_orders_user
FOREIGN KEY (user_id)
REFERENCES users(id)
ON DELETE RESTRICT
);
实战示例:博客系统
CREATE TABLE posts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
author_id UUID NOT NULL,
title VARCHAR(300) NOT NULL,
content TEXT NOT NULL,
status VARCHAR(20) DEFAULT 'draft'
CHECK (status IN ('draft', 'published', 'archived')),
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
FOREIGN KEY (author_id) REFERENCES users(id) ON DELETE RESTRICT
);
CREATE INDEX idx_posts_author ON posts(author_id);
CREATE INDEX idx_posts_status ON posts(status);
从ERD自动生成SQL
使用Erdmates,可以可视化设计ERD后,一键自动生成适用于PostgreSQL、MySQL、SQLite等各种数据库方言的CREATE TABLE SQL。
总结
CREATE TABLE是数据库开发的第一步。积极利用约束来保证数据完整性,保持一致的命名规范,这是优秀数据库模式的核心。