sell儲存與資料庫
database

D1

幾秒就能開好的真正 SQL 資料庫——完全不用自己架伺服器。

5M每日免費讀取列數
100K每日免費寫入列數
5 GB免費儲存空間
30 days時光回溯還原期
lightbulb

D1 是什麼?

D1 是一個無伺服器的 SQL 資料庫(SQL 是用「表格、列、欄」儲存資料的標準語言;無伺服器代表你完全不用自己架設或維護資料庫伺服器)。它底層用的是 SQLite——一個小巧又超穩定、內建在數十億台裝置裡的資料庫引擎。

你定義好資料表、寫熟悉的 SQL 查詢(SELECT、INSERT、UPDATE),D1 就幫你處理儲存、備份和擴充。它一開始就是為了和 Cloudflare Workers 搭配而設計的。

table_chart

把它想成…

一份住在雲端、火力全開的試算表。每張資料表就像一個分頁、有命名好的欄位,每一列是一筆紀錄,而 SQL 就是你用來精準提問的方式,例如「列出所有在台北的客戶」。

help

為什麼要用 D1?

自己跑資料庫要開伺服器、打更新、就算閒置也得付錢。D1 把這些麻煩全拿掉,只依你真正用到的查詢量和儲存量計費。

toll

依查詢計費

沒有閒置伺服器費用——只算讀寫的列數和儲存量,其他都不收。

library_add

可開上千個資料庫

可以為每個客戶或專案各開一個獨立資料庫,沒有額外的基礎費用。

history

時光回溯備份

出狀況時,可把資料庫還原到過去 30 天內的任一時間點。

code

標準 SQL

只要你會 SQLite 或基本 SQL,就已經會用 D1 了。

target

什麼時候該用 D1?

checklist

有關聯的應用資料

使用者、貼文、訂單——這類彼此有關聯、需要用 SQL 查詢的資料。

person

每個租戶一個資料庫

讓每位客戶擁有自己獨立的資料庫,資料乾淨分離。

rocket

副專案與 MVP

佛心的免費額度,最適合做原型和小型應用。

hub

在 Workers 上做全端

把 D1 和 Workers 搭在一起,讓你的 API 和資料庫住在同一個平台。

rocket_launch

怎麼開始用?

以下步驟會建立資料庫、定義資料表、從終端機跑查詢,再從 Worker 讀取它。指令裡的 --remote 代表「對雲端上真正的資料庫執行」(不加的話就是在本機測試)。

  1. 建立資料庫

    Wrangler 會印出一組 database_id——把它複製起來,下一步會用到。

    bash
    npx wrangler d1 create my-app-db
  2. 綁定資料庫

    把這段加進 wrangler.jsonc,讓你的 Worker 能用 env.DB 存取它。

    json
    {
      "d1_databases": [
        {
          "binding": "DB",
          "database_name": "my-app-db",
          "database_id": "<paste-your-id-here>"
        }
      ]
    }
  3. 建立資料表並加入資料

    用 --command 直接在終端機跑 SQL。

    bash
    npx wrangler d1 execute my-app-db --remote \
      --command "CREATE TABLE customers (id INTEGER PRIMARY KEY, name TEXT, city TEXT);"
    
    npx wrangler d1 execute my-app-db --remote \
      --command "INSERT INTO customers (name, city) VALUES ('Mei', 'Taipei');"
  4. 從 Worker 查詢

    prepare() 建立安全查詢,bind() 填入 ? 佔位符(這能防止 SQL 注入攻擊),all() 則回傳所有列。

    js
    export default {
      async fetch(request, env) {
        const { results } = await env.DB
          .prepare("SELECT * FROM customers WHERE city = ?")
          .bind("Taipei")
          .all();
        return Response.json(results);
      },
    };
  5. 部署上線

    發布這個 Worker,你那個有資料庫撐腰的 API 就上線了。

    bash
    npx wrangler deploy
school

重點概念

grid_on

資料表、列、欄

資料表裝著一列列的紀錄;每個欄位是一個有名字的欄,例如 name 或 city。

shield

預備語句

用 prepare() 加 bind() 把使用者輸入和 SQL 文字分開,擋掉注入攻擊。

cloud_sync

本機與遠端

不加 --remote 時查的是本機副本、測試很快;加上後則打到雲端上真正的資料庫。

restore

時光回溯

D1 會保留歷史,讓你能回滾到過去 30 天內的任一時刻。

tips_and_updates

小提示與計費

payments

依列數計費,不看時間

D1 計算的是讀取列數、寫入列數,再加上儲存量。免費額度每天給你 500 萬列讀取、10 萬列寫入,以及 5 GB 儲存空間。

  • 在常用來篩選的欄位上建索引(index),可以少讀很多列、同時省錢。
  • 把資料表結構放進 schema.sql 檔,再用 --file=./schema.sql 套用。
  • 付費方案每月內含 250 億列讀取、5,000 萬列寫入,超過才額外計費。
  • 關聯式資料用 D1;單純的鍵值查找用 KV;大型檔案則交給 R2。