[ PROMPT_NODE_24058 ]
D1 配置说明
[ SKILL_DOCUMENTATION ]
# D1 配置
## wrangler.jsonc 设置
c
{
"name": "your-worker-name",
"main": "src/index.ts",
"compatibility_date": "2025-01-01", // 新项目请使用当前日期
"d1_databases": [
{
"binding": "DB", // 环境变量名称
"database_name": "your-db-name", // 人类可读名称
"database_id": "your-database-id", // 来自仪表板/CLI 的 UUID
"migrations_dir": "migrations" // 可选:默认为 "migrations"
},
// 读取副本(仅限付费计划)
{
"binding": "DB_REPLICA",
"database_name": "your-db-name",
"database_id": "your-database-id" // 相同 ID,不同绑定
},
// 多个数据库
{
"binding": "ANALYTICS_DB",
"database_name": "analytics-db",
"database_id": "yyy-yyy-yyy"
}
]
}
## TypeScript 类型
typescript
interface Env { DB: D1Database; ANALYTICS_DB?: D1Database; }
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise {
const result = await env.DB.prepare('SELECT * FROM users').all();
return Response.json(result.results);
}
}
## 迁移
文件结构:`migrations/0001_initial_schema.sql`, `0002_add_posts.sql` 等。
### 迁移示例
sql
-- migrations/0001_initial_schema.sql
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
email TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_users_email ON users(email);
CREATE TABLE IF NOT EXISTS posts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
title TEXT NOT NULL,
content TEXT,
published BOOLEAN DEFAULT 0,
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
CREATE INDEX idx_posts_user_id ON posts(user_id);
CREATE INDEX idx_posts_published ON posts(published);
### 运行迁移
bash
# 创建新的迁移文件
wrangler d1 migrations create add_users_table
# 创建: migrations/0001_add_users_table.sql
# 应用迁移
wrangler d1 migrations apply --local # 应用到本地数据库
wrangler d1 migrations apply --remote # 应用到生产数据库
# 列出已应用的迁移
wrangler d1 migrations list --remote
# 直接执行 SQL(绕过迁移跟踪)
wrangler d1 execute --remote --command