SQL详解之DDL - 数据库定义语言完整指南
引言
在日常的数据库设计或重构中,你有没有遇到过这种情况?MySQL敲惯了AUTO_INCREMENT,换PostgreSQL直接报错;updated_at想自动更新,MySQL一行搞定,PostgreSQL还得写触发器?今天一篇讲透DDL核心命令,对比两大主流关系型库的实用差异,附开发中常用的代码示例。
1. DDL核心基础
DDL(Data Definition Language)是SQL中定义/修改数据库结构的子集,操作对象包括数据库、表、索引、视图等,执行后自动提交无法回滚(TRUNCATE在部分库支持例外)。
2. 数据库操作
2.1 创建数据库
2.2 删除数据库
3. 表操作
3.1 创建表(核心差异对比)
自增主键 & 自动更新时间戳
3.2 修改表结构
3.3 删除表
4. 索引操作(PostgreSQL特色更突出)
4.1 基础索引
4.2 删除索引
5. 视图操作(PostgreSQL物化视图是亮点)
5.1 普通视图(两者通用)
5.2 PostgreSQL特色:物化视图
普通视图是“虚拟表”,每次查询都重新执行底层SQL;物化视图是“物理表”,会提前存储结果,适合读多写少的统计场景。
6. 约束操作
6.1 核心约束对比
7. DDL最佳实践
7.1 命名规范
7.2 数据类型避坑
- 金额:用
DECIMAL/NUMERIC(别用FLOAT/DOUBLE,会有精度丢失) - 时间:PostgreSQL用
TIMESTAMP WITH TIME ZONE,MySQL用TIMESTAMP(DATETIME不存时区) - 文本:固定长度用
VARCHAR(n),长度不定用TEXT
7.3 安全+性能
- 生产环境DDL前务必先备份
- 大表修改结构选维护窗口
- PostgreSQL用
CREATE INDEX CONCURRENTLY避免锁表 - 定期清理无用索引
8. MySQL与PostgreSQL DDL差异速查
相关教程
总结
DDL是数据库设计的核心,MySQL语法简单、适合快速开发,PostgreSQL功能更丰富、标准兼容性更好。掌握两大库的差异,能帮你在不同场景下高效设计表结构、避免踩坑。

