4.3.1 如何创建一张表——DDL 数据定义:CREATE/ALTER/DROP 语句
一句话破题
DDL 是用来定义数据库"骨架"的语言——创建表、修改结构、删除表都靠它。
DDL 三大操作
| 操作 | 说明 | 危险等级 |
|---|---|---|
| CREATE | 创建表、索引、视图 | 低 |
| ALTER | 修改表结构 | 中 |
| DROP | 删除表、索引 | 高(数据会丢失!) |
CREATE:创建表
SQL 语法:
sql
CREATE TABLE users (
id VARCHAR(36) PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
name VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);对应的 Prisma Schema:
prisma
model User {
id String @id @default(cuid())
email String @unique
name String?
createdAt DateTime @default(now())
}常用数据类型对照:
| SQL 类型 | Prisma 类型 | 说明 |
|---|---|---|
| VARCHAR(n) | String | 变长字符串 |
| TEXT | String | 长文本 |
| INTEGER | Int | 整数 |
| BIGINT | BigInt | 大整数 |
| BOOLEAN | Boolean | 布尔值 |
| TIMESTAMP | DateTime | 时间戳 |
| DECIMAL | Decimal | 精确小数 |
| JSON | Json | JSON 数据 |
ALTER:修改表结构
添加列:
sql
ALTER TABLE users ADD COLUMN phone VARCHAR(20);修改列类型:
sql
ALTER TABLE users ALTER COLUMN name TYPE VARCHAR(200);删除列:
sql
ALTER TABLE users DROP COLUMN phone;添加索引:
sql
CREATE INDEX idx_users_email ON users(email);在 Prisma 中:修改 schema.prisma 后执行 npx prisma migrate dev
DROP:删除表
sql
-- 删除表(数据会全部丢失!)
DROP TABLE users;
-- 如果表存在才删除(避免报错)
DROP TABLE IF EXISTS users;警告
DROP TABLE 会永久删除所有数据,无法恢复!生产环境慎用。
Prisma 迁移与 DDL
Prisma 通过迁移(Migration)管理 DDL:
bash
# 1. 修改 schema.prisma
# 2. 生成迁移文件(包含 SQL)
npx prisma migrate dev --name add_phone_field
# 3. 查看生成的 SQL
cat prisma/migrations/xxx_add_phone_field/migration.sql生成的迁移文件示例:
sql
-- migration.sql
ALTER TABLE "User" ADD COLUMN "phone" TEXT;为什么要了解 DDL?
- 调试迁移问题:迁移失败时需要看懂 SQL 报错
- 手动修复数据:有时需要直接执行 SQL
- 性能优化:理解索引创建语法
本节小结
- DDL 用于定义数据库结构(CREATE/ALTER/DROP)
- Prisma 通过迁移自动生成 DDL
- DROP 是危险操作,会永久删除数据
- 了解 DDL 有助于调试和优化
