コンテンツにスキップ

SQLステートメント

D1は、テーブル、インデックスをリストし、特定のテーブルまたはインデックスのスキーマを検査するためのいくつかのデータベースレベルのコマンドをサポートしています。

データベースステートメント

D1は、テーブル、インデックスをリストし、特定のテーブルまたはインデックスのスキーマを検査するためのいくつかのデータベースレベルのステートメントをサポートしています。

これらのステートメントのいずれかを、CloudflareダッシュボードのD1コンソール、wrangler d1 execute、またはD1クライアントAPIを使用して実行できます。

PRAGMA table_list

データベース内のテーブルをリストします。これには、D1によって管理されているシステムテーブルが含まれます。

┌────────┬────────────────────┬───────┬──────┬────┬────────┐
schemanametype │ ncol │ wr │ strict │
├────────┼────────────────────┼───────┼──────┼────┼────────┤
│ main │ _cf_KV │ table210
├────────┼────────────────────┼───────┼──────┼────┼────────┤
│ main │ sqlite_schema │ table500
├────────┼────────────────────┼───────┼──────┼────┼────────┤
│ temp │ sqlite_temp_schema │ table500
└────────┴────────────────────┴───────┴──────┴────┴────────┘

PRAGMA table_info(TABLE_NAME)

指定されたTABLE_NAMEのスキーマ(列、型、NULL、デフォルト値)を表示します。

┌─────┬────────────────┬───────────────┬─────────┬────────────┬────┐
│ cid │ nametype │ notnull │ dflt_value │ pk │
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
0 │ Id │ INTEGER0 │ │ 1
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
1 │ CustomerId │ VARCHAR(8000) │ 0 │ │ 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
2 │ EmployeeId │ INTEGER1 │ │ 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
3 │ OrderDate │ VARCHAR(8000) │ 0 │ │ 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
4 │ RequiredDate │ VARCHAR(8000) │ 0 │ │ 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
5 │ ShippedDate │ VARCHAR(8000) │ 0 │ │ 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
6 │ ShipVia │ INTEGER0 │ │ 0
├─────┼────────────────┼───────────────┼─────────┼────────────┼────┤
7 │ Freight │ DECIMAL1 │ │ 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 index_list(TABLE_NAME)

指定されたTABLE_NAMEのインデックスを表示します。

┌─────┬───────────────────┬────────┬────────┬─────────┐
│ seq │ nameunique │ origin │ partial
├─────┼───────────────────┼────────┼────────┼─────────┤
0 │ idx_ordered_users │ 0 │ c │ 0
└─────┴───────────────────┴────────┴────────┴─────────┘

PRAGMA index_info(INDEX_NAME)

指定されたINDEX_NAMEのインデックス列を表示します。

┌───────┬─────┬────────────┐
│ seqno │ cid │ name
├───────┼─────┼────────────┤
02 │ created_at │
└───────┴─────┴────────────┘

クエリ 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)"
}

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を設定します。

-- このトランザクションで外部キーの施行を遅延させる。
PRAGMA defer_foreign_keys = on
-- CREATE TABLEまたはALTER TABLE / COLUMNステートメントを実行します。
ALTER TABLE users ...
-- トランザクションの終了時に設定されていない場合、これは暗黙的です。
PRAGMA defer_foreign_keys = off

外部キーの取り扱いについて詳しくは、外部キーのドキュメントを参照してください。

SQLite拡張

D1は、追加機能のためにSQLite拡張のサブセットをサポートしています。これには、以下が含まれます。

関連リソース