SQLステートメント
D1は、テーブル、インデックスをリストし、特定のテーブルまたはインデックスのスキーマを検査するためのいくつかのデータベースレベルのコマンドをサポートしています。
D1は、テーブル、インデックスをリストし、特定のテーブルまたはインデックスのスキーマを検査するためのいくつかのデータベースレベルのステートメントをサポートしています。
これらのステートメントのいずれかを、CloudflareダッシュボードのD1コンソール、wrangler d1 execute、またはD1クライアントAPIを使用して実行できます。
データベース内のテーブルをリストします。これには、D1によって管理されているシステムテーブルが含まれます。
┌────────┬────────────────────┬───────┬──────┬────┬────────┐│ schema │ name │ type │ ncol │ wr │ strict │├────────┼────────────────────┼───────┼──────┼────┼────────┤│ main │ _cf_KV │ table │ 2 │ 1 │ 0 │├────────┼────────────────────┼───────┼──────┼────┼────────┤│ main │ sqlite_schema │ table │ 5 │ 0 │ 0 │├────────┼────────────────────┼───────┼──────┼────┼────────┤│ temp │ sqlite_temp_schema │ table │ 5 │ 0 │ 0 │└────────┴────────────────────┴───────┴──────┴────┴────────┘指定されたTABLE_NAMEのスキーマ(列、型、NULL、デフォルト値)を表示します。
┌─────┬────────────────┬───────────────┬─────────┬────────────┬────┐│ 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_info(TABLE_NAME)に似ていますが、生成列も含まれています。
指定されたTABLE_NAMEのインデックスを表示します。
┌─────┬───────────────────┬────────┬────────┬─────────┐│ seq │ name │ unique │ origin │ partial │├─────┼───────────────────┼────────┼────────┼─────────┤│ 0 │ idx_ordered_users │ 0 │ c │ 0 │└─────┴───────────────────┴────────┴────────┴─────────┘指定されたINDEX_NAMEのインデックス列を表示します。
┌───────┬─────┬────────────┐│ seqno │ cid │ name │├───────┼─────┼────────────┤│ 0 │ 2 │ created_at │└───────┴─────┴────────────┘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)" }現在のトランザクションの終了まで外部キー制約の施行を遅延させることができます。これは、スキーマの変更が適用される順序によって一時的に制約に違反する可能性があるため、データベースのマイグレーション中に便利です。
これは、現在のトランザクションの外で外部キーの施行を無効にするものではありません。トランザクションの終了時に未解決の外部キー違反がある場合、それは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外部キーの取り扱いについて詳しくは、外部キーのドキュメントを参照してください。
D1は、追加機能のためにSQLite拡張のサブセットをサポートしています。これには、以下が含まれます。
- FTS5モジュール ↗によるフルテキスト検索
- D1でのインデックスの作成方法を学びます。
- D1のJSON関数を使用してJSONデータをクエリします。
wrangler devを使用して、WorkerとD1をローカルで実行し、デプロイ前に問題をデバッグします。