SQL接口基本规范

本文共有243918个字,关键词:

D1 与大多数 SQLite 的 SQL 约定兼容,因为它利用了 SQLite 的查询引擎。D1 支持许多数据库级语句,这些语句允许您列出表、索引并检查给定表或索引的架构。

您可以通过 Cloudflare 仪表板中的 D1 控制台wrangler d1 execute或使用D1 Worker Bindings API执行这些语句中的任何一个。

支持的 SQLite 扩展

D1 支持 SQLite 扩展的子集以增加功能,其中包括:

兼容的 PRAGMA 语句

D1 支持一些SQLite PRAGMA 语句。PRAGMA 语句是 SQLite 的 SQL 扩展。PRAGMA 命令可用于:

  • 修改某些 SQLite 操作的行为。
  • 查询 SQLite 库以获取有关模式或表的内部数据(但请注意,PRAGMA 语句不能查询表的内容)。
  • 控制环境变量。

本页上的 PRAGMA 语句示例使用以下 SQL。

PRAGMA foreign_keys=off;
DROP TABLE IF EXISTS "Employee";
DROP TABLE IF EXISTS "Category";
DROP TABLE IF EXISTS "Customer";
DROP TABLE IF EXISTS "Shipper";
DROP TABLE IF EXISTS "Supplier";
DROP TABLE IF EXISTS "Order";
DROP TABLE IF EXISTS "Product";
DROP TABLE IF EXISTS "OrderDetail";
DROP TABLE IF EXISTS "CustomerCustomerDemo";
DROP TABLE IF EXISTS "CustomerDemographic";
DROP TABLE IF EXISTS "Region";
DROP TABLE IF EXISTS "Territory";
DROP TABLE IF EXISTS "EmployeeTerritory";
DROP VIEW IF EXISTS [ProductDetails_V];
CREATE TABLE IF NOT EXISTS "Employee" ( "Id" INTEGER PRIMARY KEY, "LastName" VARCHAR(8000) NULL, "FirstName" VARCHAR(8000) NULL, "Title" VARCHAR(8000) NULL, "TitleOfCourtesy" VARCHAR(8000) NULL, "BirthDate" VARCHAR(8000) NULL, "HireDate" VARCHAR(8000) NULL, "Address" VARCHAR(8000) NULL, "City" VARCHAR(8000) NULL, "Region" VARCHAR(8000) NULL, "PostalCode" VARCHAR(8000) NULL, "Country" VARCHAR(8000) NULL, "HomePhone" VARCHAR(8000) NULL, "Extension" VARCHAR(8000) NULL, "Photo" BLOB NULL, "Notes" VARCHAR(8000) NULL, "ReportsTo" INTEGER NULL, "PhotoPath" VARCHAR(8000) NULL);
CREATE TABLE IF NOT EXISTS "Category" ( "Id" INTEGER PRIMARY KEY, "CategoryName" VARCHAR(8000) NULL, "Description" VARCHAR(8000) NULL);
CREATE TABLE IF NOT EXISTS "Customer" ( "Id" VARCHAR(8000) PRIMARY KEY, "CompanyName" VARCHAR(8000) NULL, "ContactName" VARCHAR(8000) NULL, "ContactTitle" VARCHAR(8000) NULL, "Address" VARCHAR(8000) NULL, "City" VARCHAR(8000) NULL, "Region" VARCHAR(8000) NULL, "PostalCode" VARCHAR(8000) NULL, "Country" VARCHAR(8000) NULL, "Phone" VARCHAR(8000) NULL, "Fax" VARCHAR(8000) NULL);
CREATE TABLE IF NOT EXISTS "Shipper" ( "Id" INTEGER PRIMARY KEY, "CompanyName" VARCHAR(8000) NULL, "Phone" VARCHAR(8000) NULL);
CREATE TABLE IF NOT EXISTS "Supplier" ( "Id" INTEGER PRIMARY KEY, "CompanyName" VARCHAR(8000) NULL, "ContactName" VARCHAR(8000) NULL, "ContactTitle" VARCHAR(8000) NULL, "Address" VARCHAR(8000) NULL, "City" VARCHAR(8000) NULL, "Region" VARCHAR(8000) NULL, "PostalCode" VARCHAR(8000) NULL, "Country" VARCHAR(8000) NULL, "Phone" VARCHAR(8000) NULL, "Fax" VARCHAR(8000) NULL, "HomePage" VARCHAR(8000) NULL);
CREATE TABLE IF NOT EXISTS "Order" ( "Id" INTEGER PRIMARY KEY, "CustomerId" VARCHAR(8000) NULL, "EmployeeId" INTEGER NOT NULL, "OrderDate" VARCHAR(8000) NULL, "RequiredDate" VARCHAR(8000) NULL, "ShippedDate" VARCHAR(8000) NULL, "ShipVia" INTEGER NULL, "Freight" DECIMAL NOT NULL, "ShipName" VARCHAR(8000) NULL, "ShipAddress" VARCHAR(8000) NULL, "ShipCity" VARCHAR(8000) NULL, "ShipRegion" VARCHAR(8000) NULL, "ShipPostalCode" VARCHAR(8000) NULL, "ShipCountry" VARCHAR(8000) NULL);
CREATE TABLE IF NOT EXISTS "Product" ( "Id" INTEGER PRIMARY KEY, "ProductName" VARCHAR(8000) NULL, "SupplierId" INTEGER NOT NULL, "CategoryId" INTEGER NOT NULL, "QuantityPerUnit" VARCHAR(8000) NULL, "UnitPrice" DECIMAL NOT NULL, "UnitsInStock" INTEGER NOT NULL, "UnitsOnOrder" INTEGER NOT NULL, "ReorderLevel" INTEGER NOT NULL, "Discontinued" INTEGER NOT NULL);
CREATE TABLE IF NOT EXISTS "OrderDetail" ( "Id" VARCHAR(8000) PRIMARY KEY, "OrderId" INTEGER NOT NULL, "ProductId" INTEGER NOT NULL, "UnitPrice" DECIMAL NOT NULL, "Quantity" INTEGER NOT NULL, "Discount" DOUBLE NOT NULL);
CREATE TABLE IF NOT EXISTS "CustomerCustomerDemo" ( "Id" VARCHAR(8000) PRIMARY KEY, "CustomerTypeId" VARCHAR(8000) NULL);
CREATE TABLE IF NOT EXISTS "CustomerDemographic" ( "Id" VARCHAR(8000) PRIMARY KEY, "CustomerDesc" VARCHAR(8000) NULL);
CREATE TABLE IF NOT EXISTS "Region" ( "Id" INTEGER PRIMARY KEY, "RegionDescription" VARCHAR(8000) NULL);
CREATE TABLE IF NOT EXISTS "Territory" ( "Id" VARCHAR(8000) PRIMARY KEY, "TerritoryDescription" VARCHAR(8000) NULL, "RegionId" INTEGER NOT NULL);
CREATE TABLE IF NOT EXISTS "EmployeeTerritory" ( "Id" VARCHAR(8000) PRIMARY KEY, "EmployeeId" INTEGER NOT NULL, "TerritoryId" VARCHAR(8000) NULL);
CREATE VIEW [ProductDetails_V] as select p.*, c.CategoryName, c.Description as [CategoryDescription], s.CompanyName as [SupplierName], s.Region as [SupplierRegion] from [Product] p join [Category] c on p.CategoryId = c.id join [Supplier] s on s.id = p.SupplierId;

PRAGMA table_list

列出数据库中的表和视图。其中包括 D1 维护的系统表。

返回值

每个表占一行。每行包含:

  1. Schema:表所在的架构(例如maintemp
  2. name:表的名称
  3. type:对象的类型(tableviewshadow、之一virtual
  4. ncol:表中的列数,包括生成列或隐藏列
  5. wr1如果表是 WITHOUT ROWID 表,0否则
  6. strict1如果表是 STRICT 表,0否则

示例PRAGMA table_list


终端窗口
npx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA table_list'
🌀 Executing on remote database [DATABASE_NAME] (DATABASE_ID):
🌀 To execute on your local development database, remove the --remote flag from your wrangler command.
🚣 Executed 1 commands in 0.5874ms
┌────────┬──────────────────────┬───────┬──────┬────┬────────┐
schema name type ncol wr strict
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main Territory table 3 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main CustomerDemographic table 2 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main OrderDetail table 6 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main sqlite_schema table 5 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main Region table 2 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main _cf_KV table 2 1 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main ProductDetails_V view 14 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main EmployeeTerritory table 3 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main Employee table 18 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main Category table 3 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main Customer table 11 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main Shipper table 3 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main Supplier table 12 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main Order table 14 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main CustomerCustomerDemo table 2 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
main Product table 10 0 0
├────────┼──────────────────────┼───────┼──────┼────┼────────┤
temp sqlite_temp_schema table 5 0 0
└────────┴──────────────────────┴───────┴──────┴────┴────────┘

PRAGMA table_info("TABLE_NAME")

显示给定的模式(列、类型、空值、默认值)TABLE_NAME

返回值

指定表中的每一列占一行。每行包含:

  1. cid:行标识符
  2. name:列的名称
  3. type:数据类型(如果提供),''否则
  4. notnull1如果该列可以为 NULL,0否则
  5. dflt_value:该列的默认值
  6. pk1如果该列是主键,0否则

示例PRAGMA table_info


终端窗口
npx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA table_info("Order")'
🌀 Executing on remote database [DATABASE_NAME] (DATABASE_ID):
🌀 To execute on your local development database, remove the --remote flag from your wrangler command.
🚣 Executed 1 commands in 0.8502ms
┌─────┬────────────────┬───────────────┬─────────┬────────────┬────┐
cid name type notnull dflt_value pk
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
0 Id INTEGER 0 1
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
1 CustomerId VARCHAR(8000) 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
2 EmployeeId INTEGER 1 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
3 OrderDate VARCHAR(8000) 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
4 RequiredDate VARCHAR(8000) 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
5 ShippedDate VARCHAR(8000) 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
6 ShipVia INTEGER 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
7 Freight DECIMAL 1 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
8 ShipName VARCHAR(8000) 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
9 ShipAddress VARCHAR(8000) 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
10 ShipCity VARCHAR(8000) 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
11 ShipRegion VARCHAR(8000) 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
12 ShipPostalCode VARCHAR(8000) 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
13 ShipCountry VARCHAR(8000) 0 0
└─────┴────────────────┴───────────────┴─────────┴────────────┴────┘

PRAGMA table_xinfo("TABLE_NAME")

类似于PRAGMA table_info(TABLE_NAME)但也包括生成的列

示例PRAGMA table_xinfo


终端窗口
npx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA table_xinfo("Order")'
🌀 Executing on remote database [DATABASE_NAME] (DATABASE_ID):
🌀 To execute on your local development database, remove the --remote flag from your wrangler command.
🚣 Executed 1 commands in 0.3854ms
┌─────┬────────────────┬───────────────┬─────────┬────────────┬────┬────────┐
cid name type notnull dflt_value pk hidden
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
0 Id INTEGER 0 1 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
1 CustomerId VARCHAR(8000) 0 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
2 EmployeeId INTEGER 1 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
3 OrderDate VARCHAR(8000) 0 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
4 RequiredDate VARCHAR(8000) 0 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
5 ShippedDate VARCHAR(8000) 0 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
6 ShipVia INTEGER 0 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
7 Freight DECIMAL 1 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
8 ShipName VARCHAR(8000) 0 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
9 ShipAddress VARCHAR(8000) 0 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
10 ShipCity VARCHAR(8000) 0 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
11 ShipRegion VARCHAR(8000) 0 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
12 ShipPostalCode VARCHAR(8000) 0 0 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┼────────┤
13 ShipCountry VARCHAR(8000) 0 0 0
└─────┴────────────────┴───────────────┴─────────┴────────────┴────┴────────┘

PRAGMA index_list("TABLE_NAME")

显示给定的索引TABLE_NAME

返回值

与指定表关联的每个索引对应一行。每行包含:

  1. seq:内部跟踪的序列号
  2. name:索引的名称
  3. unique1如果索引是唯一的,0否则
  4. origin:索引的来源(c如果由语句创建CREATE INDEXu如果由 UNIQUE 约束创建,pk如果由 PRIMARY KEY 约束创建)
  5. partial1如果索引是部分索引,0否则

示例PRAGMA index_list


终端窗口
npx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA index_list("Territory")'
🌀 Executing on remote database d1-pragma-db (DATABASE_ID):
🌀 To execute on your local development database, remove the --remote flag from your wrangler command.
🚣 Executed 1 commands in 0.2177ms
┌─────┬──────────────────────────────┬────────┬────────┬─────────┐
seq name unique origin partial
├─────┼──────────────────────────────┼────────┼────────┼─────────┤
0 sqlite_autoindex_Territory_1 1 pk 0
└─────┴──────────────────────────────┴────────┴────────┴─────────┘

PRAGMA index_info(INDEX_NAME)

显示给定的索引列INDEX_NAME

返回值

指定索引中的每个键列对应一行。每行包含:

  1. seqno:索引中列的排名
  2. cid:被索引的表中列的排名
  3. name:被索引的列的名称

示例PRAGMA index_info


终端窗口
npx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA index_info("sqlite_autoindex_Territory_1")'
🌀 Executing on remote database d1-pragma-db (DATABASE_ID):
🌀 To execute on your local development database, remove the --remote flag from your wrangler command.
🚣 Executed 1 commands in 0.2523ms
┌───────┬─────┬──────┐
seqno cid name
├───────┼─────┼──────┤
0 0 Id
└───────┴─────┴──────┘

PRAGMA index_xinfo("INDEX_NAME")

类似PRAGMA index_info("TABLE_NAME")但也包括隐藏列。

示例PRAGMA index_xinfo


终端窗口
npx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA index_xinfo("sqlite_autoindex_Territory_1")'
🌀 Executing on remote database d1-pragma-db (DATABASE_ID):
🌀 To execute on your local development database, remove the --remote flag from your wrangler command.
🚣 Executed 1 commands in 0.6034ms
┌───────┬─────┬──────┬──────┬────────┬─────┐
seqno cid name desc coll key
├───────┼─────┼──────┼──────┼────────┼─────┤
0 0 Id 0 BINARY 1
├───────┼─────┼──────┼──────┼────────┼─────┤
1 -1 0 BINARY 0
└───────┴─────┴──────┴──────┴────────┴─────┘

PRAGMA quick_check

检查表的格式和一致性,包括:

  • 格式错误的记录
  • 缺页
  • 数据库中多次使用或根本不使用的部分。

返回值

  • 如果没有错误:一行,其值为OK
  • 如果有错误:描述检查标记的问题的字符串

示例PRAGMA quick_check


终端窗口
npx wrangler d1 execute [DATABASE_NAME] --command='PRAGMA quick_check'
🌀 Executing on remote database [DATABASE_NAME] (DATABASE_ID):
🌀 To execute on your local development database, remove the --remote flag from your wrangler command.
🚣 Executed 1 commands in 1.4073ms
┌─────────────┐
quick_check
├─────────────┤
ok
└─────────────┘

PRAGMA foreign_key_check

检查选定表中外键的无效引用。

PRAGMA foreign_key_list("TABLE_NAME")

列出选定表中的外键约束。

PRAGMA case_sensitive_like = (on|off)

切换 LIKE 运算符的大小写敏感性。PRAGMA case_sensitive_like设置为:

  • ON:'a' LIKE 'A' 为假
  • OFF:'a' LIKE 'A' 为真(这是 LIKE 运算符的默认行为)

PRAGMA ignore_check_constraints = (on|off)

切换 CHECK 约束的执行。当PRAGMA ignore_check_constraints设置为:

  • ON:检查约束被忽略
  • OFF:强制执行检查约束(这是默认行为)

PRAGMA legacy_alter_table = (on|off)

在旧版 SQLite (3.24.0) 之前/之后切换 ALTER TABLE RENAME 命令行为。PRAGMA legacy_alter_table设置为:

  • ON:ALTER TABLE RENAME 仅重写其 CREATE TABLE 语句以及任何关联的 CREATE INDEX 和 CREATE TRIGGER 语句中表名的初始出现。所有其他出现均不作修改。
  • OFF:ALTER TABLE RENAME 重写对模式中表名的所有引用(这是默认行为)。

PRAGMA recursive_triggers = (on|off)

切换递归触发功能。PRAGMA recursive_triggers设置为以下值时:

  • ON:触发​​后可激活其他触发器的触发器(单个触发器可在同一行上触发多次)
  • OFF:触发​​的触发器无法激活其他触发器

PRAGMA reverse_unordered_selects = (on|off)

切换不带 ORDER BY 子句的 SELECT 语句的结果顺序。当PRAGMA reverse_unordered_selects设置为:

  • ON:反转 SELECT 语句结果的顺序
  • OFF:按通常顺序返回 SELECT 语句的结果

PRAGMA foreign_keys = (on|off)

切换外键约束执行。PRAGMA foreign_keys设置为时:

  • ON:停止违反外键约束的操作
  • OFF:允许违反外键约束的操作

PRAGMA defer_foreign_keys = (on|off)

允许您将外键约束的执行推迟到当前事务结束。这在数据库迁移期间非常有用,因为架构更改可能会暂时违反约束,具体取决于应用约束的顺序。

这不会禁用当前事务之外的外键强制执行。如果您在事务结束时尚未解决未解决的外键违规问题,则它将失败并出现FOREIGN KEY constraint failed错误。

请注意,设置PRAGMA defer_foreign_keys = ON不会阻止ON DELETE CASCADE操作的执行。虽然外键约束检查被推迟到事务结束时,但ON DELETE CASCADE操作仍将保持活动状态,这与 SQLite 的行为一致。

要推迟外键执行,请PRAGMA defer_foreign_keys = on在事务开始时或在违反约束的更改之前进行设置:

-- Defer foreign key enforcement in this transaction.
PRAGMA defer_foreign_keys = on

-- Run your CREATE TABLE or ALTER TABLE / COLUMN statements
ALTER TABLE users ...

-- This is implicit if not set by the end of the transaction.
PRAGMA defer_foreign_keys = off

请参阅外键文档以了解有关如何使用外键的更多信息。

PRAGMA optimize

ANALYZE如果有必要,尝试通过对每个表运行命令来优化数据库中的所有架构。ANALYZE更新包含有关表和索引的统计信息的内部表。这些统计信息可帮助更有效地执行输入查询。

PRAGMA optimize运行ANALYZE,它会设置一个限制以确保命令不会花费太长时间执行。或者,PRAGMA optimize可能会认为没有必要运行ANALYZE(例如,如果架构没有发生重大变化)。在这种情况下,不会进行任何优化。

我们建议在对架构进行任何更改后(例如,创建索引后)运行此命令。

有关如何优化数据库的更多信息,请参阅SQLite PRAGMA 优化文档↗ 。PRAGMA optimize

询问sqlite_master

您还可以查询sqlite_master表以显示所有表、索引以及用于生成它们的原始 SQL:

SELECT name, sql FROM sqlite_master
{
"name": "users",
"sql": "CREATE TABLE users ( user_id INTEGER PRIMARY KEY, email_address TEXT, created_at INTEGER, deleted INTEGER, settings TEXT)"
},
{
"name": "idx_ordered_users",
"sql": "CREATE INDEX idx_ordered_users ON users(created_at DESC)"
},
{
"name": "Order",
"sql": "CREATE TABLE \"Order\" ( \"Id\" INTEGER PRIMARY KEY, \"CustomerId\" VARCHAR(8000) NULL, \"EmployeeId\" INTEGER NOT NULL, \"OrderDate\" VARCHAR(8000) NULL, \"RequiredDate\" VARCHAR(8000) NULL, \"ShippedDate\" VARCHAR(8000) NULL, \"ShipVia\" INTEGER NULL, \"Freight\" DECIMAL NOT NULL, \"ShipName\" VARCHAR(8000) NULL, \"ShipAddress\" VARCHAR(8000) NULL, \"ShipCity\" VARCHAR(8000) NULL, \"ShipRegion\" VARCHAR(8000) NULL, \"ShipPostalCode\" VARCHAR(8000) NULL, \"ShipCountry\" VARCHAR(8000) NULL)"
},
{
"name": "Product",
"sql": "CREATE TABLE \"Product\" ( \"Id\" INTEGER PRIMARY KEY, \"ProductName\" VARCHAR(8000) NULL, \"SupplierId\" INTEGER NOT NULL, \"CategoryId\" INTEGER NOT NULL, \"QuantityPerUnit\" VARCHAR(8000) NULL, \"UnitPrice\" DECIMAL NOT NULL, \"UnitsInStock\" INTEGER NOT NULL, \"UnitsOnOrder\" INTEGER NOT NULL, \"ReorderLevel\" INTEGER NOT NULL, \"Discontinued\" INTEGER NOT NULL)"
}

使用 LIKE 搜索

您可以使用 SQL 运算符执行搜索LIKE

const { results } = await env.DB.prepare(
"SELECT * FROM Customers WHERE CompanyName LIKE ?",
)
.bind("%eve%")
.all();
console.log("results: ", results);
results: [...]
  • 了解如何在 D1 中创建索引。
  • 使用D1的JSON函数查询JSON数据。
  • 用于wrangler dev在本地运行您的 Worker 和 D1 并在部署之前调试问题。

「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」

R.tian

(๑>ڡ<)☆谢谢老板~

使用微信扫描二维码完成支付

版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。

暂时无法评论哦~

暂无评论