[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EERJC83V9WNBAGS42ZXZW6":3,"skill-same:01M6EERJC83V9WNBAGS42ZXZW6":52},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":25,"linkOnly":26,"markdownContent":27,"markdownBody":27,"frontMatter":28,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":34,"ownerHtmlUrl":35,"ownerBlogUrl":6,"ownerDescription":36,"updatedAt":37,"install":38,"resources":51},"01M6EERJC83V9WNBAGS42ZXZW6","d1-database",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fd1-database\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[23,24],"database","d1 database","2026-11-10 10:12:30",false,"# Cloudflare D1\n\n## Overview\n\nD1 is Cloudflare's serverless SQLite database — runs at the edge alongside Workers. Zero connection overhead (it's in the same data center as your Worker), SQLite query syntax, automatic replication, and pay-per-query pricing. Perfect for read-heavy workloads, content sites, and applications where latency matters.\n\n## When to Use\n\n- Building on Cloudflare Workers and need a database\n- Read-heavy applications (blogs, content sites, APIs)\n- Want SQLite simplicity with global distribution\n- Serverless applications with no connection pooling headaches\n- Edge-first applications where database latency matters\n\n## Instructions\n\n### Setup\n\n```bash\n# Create a D1 database\nnpx wrangler d1 create my-database\n\n# Add to wrangler.toml\n```\n\n```toml\n# wrangler.toml\n[[d1_databases]]\nbinding = \"DB\"\ndatabase_name = \"my-database\"\ndatabase_id = \"xxxx-xxxx-xxxx\"\n```\n\n### Schema and Migrations\n\n```bash\n# Create migration\nnpx wrangler d1 migrations create my-database init\n```\n\n```sql\n-- migrations\u002F0001_init.sql\nCREATE TABLE users (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n  email TEXT NOT NULL UNIQUE,\n  name TEXT NOT NULL,\n  created_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE posts (\n  id INTEGER PRIMARY KEY AUTOINCREMENT,\n  title TEXT NOT NULL,\n  content TEXT NOT NULL,\n  author_id INTEGER NOT NULL REFERENCES users(id),\n  published BOOLEAN DEFAULT FALSE,\n  created_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX idx_posts_author ON posts(author_id);\nCREATE INDEX idx_posts_published ON posts(published);\n```\n\n```bash\n# Apply migrations\nnpx wrangler d1 migrations apply my-database\n```\n\n### Queries in Workers\n\n```typescript\n\u002F\u002F src\u002Findex.ts — Cloudflare Worker with D1\nexport default {\n  async fetch(request: Request, env: Env): Promise\u003CResponse> {\n    const url = new URL(request.url);\n\n    if (url.pathname === \"\u002Fapi\u002Fposts\" && request.method === \"GET\") {\n      const { results } = await env.DB.prepare(\n        `SELECT posts.*, users.name as author_name\n         FROM posts\n         JOIN users ON posts.author_id = users.id\n         WHERE posts.published = TRUE\n         ORDER BY posts.created_at DESC\n         LIMIT ?`\n      ).bind(20).all();\n\n      return Response.json({ posts: results });\n    }\n\n    if (url.pathname === \"\u002Fapi\u002Fposts\" && request.method === \"POST\") {\n      const body = await request.json();\n      const result = await env.DB.prepare(\n        \"INSERT INTO posts (title, content, author_id) VALUES (?, ?, ?) RETURNING *\"\n      ).bind(body.title, body.content, body.authorId).first();\n\n      return Response.json({ post: result }, { status: 201 });\n    }\n\n    return new Response(\"Not found\", { status: 404 });\n  },\n};\n```\n\n### With Drizzle ORM\n\n```typescript\n\u002F\u002F src\u002Fdb\u002Fschema.ts — Drizzle schema for D1\nimport { sqliteTable, text, integer } from \"drizzle-orm\u002Fsqlite-core\";\n\nexport const users = sqliteTable(\"users\", {\n  id: integer(\"id\").primaryKey({ autoIncrement: true }),\n  email: text(\"email\").notNull().unique(),\n  name: text(\"name\").notNull(),\n});\n\nexport const posts = sqliteTable(\"posts\", {\n  id: integer(\"id\").primaryKey({ autoIncrement: true }),\n  title: text(\"title\").notNull(),\n  content: text(\"content\").notNull(),\n  authorId: integer(\"author_id\").notNull().references(() => users.id),\n  published: integer(\"published\", { mode: \"boolean\" }).default(false),\n});\n```\n\n```typescript\n\u002F\u002F src\u002Findex.ts — Using Drizzle with D1\nimport { drizzle } from \"drizzle-orm\u002Fd1\";\nimport { eq } from \"drizzle-orm\";\nimport * as schema from \".\u002Fdb\u002Fschema\";\n\nexport default {\n  async fetch(request: Request, env: Env) {\n    const db = drizzle(env.DB, { schema });\n\n    const publishedPosts = await db.query.posts.findMany({\n      where: eq(schema.posts.published, true),\n      with: { author: true },\n      orderBy: (posts, { desc }) => [desc(posts.id)],\n      limit: 20,\n    });\n\n    return Response.json({ posts: publishedPosts });\n  },\n};\n```\n\n## Examples\n\n### Example 1: Build a blog API on the edge\n\n**User prompt:** \"Create a blog API with Cloudflare Workers and D1 for posts and comments.\"\n\nThe agent will create D1 schema, migrations, CRUD endpoints in a Worker, and Drizzle ORM integration.\n\n### Example 2: User authentication with D1\n\n**User prompt:** \"Store user accounts in D1 with email\u002Fpassword auth.\"\n\nThe agent will create users table, password hashing with Web Crypto API, session management, and auth middleware.\n\n## Guidelines\n\n- **SQLite syntax** — D1 is SQLite under the hood\n- **Prepared statements with `.bind()`** — prevent SQL injection\n- **`.first()` for single row, `.all()` for multiple** — query methods\n- **Migrations via Wrangler** — version-controlled schema changes\n- **Read replicas are automatic** — D1 replicates globally\n- **Write latency is higher** — writes go to primary; reads are fast everywhere\n- **5MB row limit** — not for large blobs\n- **Free tier: 5M reads, 100K writes\u002Fday** — generous for small apps\n- **Drizzle ORM recommended** — type-safe queries with D1 adapter\n- **Local development** — `wrangler dev` uses local SQLite\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fd1-database",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill d1-database",{"tool":44,"command":45},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill d1-database",{"tool":47,"command":48},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill d1-database","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fd1-database\u002FSKILL.md",true,[],[53,65,75,84,90,97],{"skillNo":54,"name":55,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":61,"publishedAt":25},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[58],{"categoryNo":59,"categoryName":60,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[62,63,64],"model","model hierarchy","model hierarchy skill",{"skillNo":66,"name":67,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":71,"publishedAt":25},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[70],{"categoryNo":59,"categoryName":60,"taxonomyType":20,"taxonomyTypeDesc":21},[72,73,74],"MCP","zoom","zoom mcp",{"skillNo":76,"name":77,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":25},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[81,82,83,73],"sdk","zoom apps sdk","apps",{"skillNo":85,"name":86,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":25},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[86],{"skillNo":91,"name":92,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":96,"publishedAt":25},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[95],{"categoryNo":59,"categoryName":60,"taxonomyType":20,"taxonomyTypeDesc":21},[92],{"skillNo":98,"name":99,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":25},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[99]]