SQLite でテーブルを記述する

Bilal Shahid 2023年6月21日
  1. SQLite でテーブルを記述する
  2. スキーマ テーブル
SQLite でテーブルを記述する

SQLite は、任意のデバイスのテキスト ファイルにデータを格納する、サーバーレスのオープンソース SQL データベースです。 これは、信頼性が高く、高速で、自己完結型のフル機能を備えた C プログラミング ライブラリの SQL データベース エンジンです。

このソフトウェアは世界中で非常に人気があります。 携帯電話、ほとんどのコンピューター、および世界中のさまざまなアプリケーションが組み込まれています。

SQLite には、ユーザー向けにいくつかの異なるコマンドが用意されています。 これらのコマンドの 1つが describe コマンドです。

これにより、ユーザーはテーブルの詳細な構造を確認できます。

SQLite でテーブルを記述する

SQLite は、ユーザーが自由に使用できる多くのコマンドを使用するリレーショナル データベース管理システムです。 このデータベース ソフトウェアは、.schema コマンドを使用して、データベース内のテーブルを記述します。

ここで、.schema コマンドは、必要なテーブルの詳細な構造を取得するために使用できるコマンド ライン プログラムです。 テーブルを記述するということは、基本的に、列名、列のデータ型、列のサイズなど、テーブル内のすべての列の特定の詳細を出力できることを意味します。

SQLite では、さまざまな方法でテーブルを記述できます。

SQLite で .schema を使用してテーブルを記述する

テーブルを記述する構文は次のとおりです。

.schema yourTableName

ここで、yourTableName は説明が必要なテーブル名で、.schema は使用するコマンドです。 すべてのテーブルを表示するには、コマンド .tables を使用します。 ただし、特定のテーブルを表示する必要がある場合は、コマンド .schema tablename を使用してください。

.schema または sqlite_master からのクエリが何も出力しない場合、これは存在しないテーブル名を示しています。

SQLite で PRAGMA を使用してテーブルを記述する

前述したように、.schema メソッドを使用して、指定したテーブル名でテーブルを記述できます。 ただし、このコマンドでは、最初にテーブルを作成する必要があります。

次に使用できるメソッドは PRAGMA メソッドです。 このコマンドを使用するための構文は次のとおりです。

PRAGMA table_info(tablename)

このコマンドは、SQL describe コマンドと同じです。 列で指定したテーブルのすべての列から単一の行を返します。

PRAGMA table_xinfo(tablename)

これは前のステートメントの別バージョンです。 ここでの違いは、ステートメントで指定された仮想テーブルの隠し列を返すことです。

この場合、.schema は、PRAGMA よりも、テーブルの制約を含むテーブルの詳細を表示できます。

すべてのテーブルの詳細を適切な形式で取得する必要がある場合は、次のコマンドを使用します。

.schema --indent

SQLite で sqlite_master を使用してテーブルを記述する

別のコマンドは次のとおりです。

sqlite_master tablename

これは、テーブルを記述するために使用されるコマンドです。

スキーマ テーブル

すべての SQLite データベースは、単一のスキーマ テーブルで構成されています。 このテーブルには、リストやトリガーからデータベース内のビューまで、テーブル内のすべてを表すデータベース スキーマが保持されます。

スキーマ テーブルは次のようになります。

 CREATE TABLE sqlite_schema(
  type text,
  name text,
  tbl_name text,
  rootpage integer,
  SQL text
);

SQLite は、データベースの作成時にスキーマ テーブルを作成し、SQLite ユーザーが実行のためにステートメントを送信すると、その内容を変更し続けます。

通常の状態では、変更する必要はありません。 ユーザーがそれを変更した場合、データベースが破損するリスクを負う必要があります。

sqlite_schema には、sqlite_schema テーブル自体のエントリがない場合を除き、スキーマ内の各テーブル、インデックス、ビュー、およびトリガーに対して 1つの行が含まれます。 sqlite_schema はスキーマ テーブルの参照であり、sqlite_mastersqlite_temp_schemasqlite_temp_master などの代替名があります。

ここでは、最後の 2つの選択肢が一時データベースに使用されます。 それらはすべてのデータベース接続に関連付けられています。

スキーマ テーブルについて説明すると、スキーマは typenametbl_nameroot pageSQL などのさまざまなパラメーターを使用します。

type は、定義されているオブジェクトのタイプに依存するため、ビュー、インデックス、テーブル、トリガーなどのテキスト文字列を意味します。 タイプは sqlite_schema.type として表すことができます。 name は、オブジェクトの列ストア名を指定します。

ここでは、テーブルの作成時に一意および主キーの制約を指定することもできます。 ただし、rowid テーブルでは主キー制約を使用できないため、sqlite_schema は主キーを許可しませんが、SQLite 自動インデックスは主キーを使用します。

tbl_name は、テーブル名またはビュー名を格納するために使用されます。 tbl_namesqlite_schema_tbl_name として表すことができます。

ルート ページ は、テーブルとインデックスのルート ツリー ページのページ番号を格納するために使用されます。 sqlite_schema_rootpage として表します。

SQL はさまざまなコマンドを提供します。 これは、データベースに対して実行できるトリガーを作成できることを意味します。

SQLsqlite_schem.sql と表現します。 sqlite_schema.sql 列のテキストは、作成された元の CREATE ステートメント テキストのコピーです。 ただし、前に説明したように正規化され、ALTER TABLE ステートメントを進めることによって変更されました。

内部インデックスの場合は NULL です。 これらは PRIMARY KEY または UNIQUE 制約によって自動的に作成されます。

SQLite でテーブルを記述する例

まず、create table ステートメントを使用してテーブルを作成します。

create table employee (id integer primary key, name text not null, dept text not null, salary text not null);

次のコマンドを入力します。

PRAGMA table_info(employee);

前述のように、このコマンドはテーブルを記述します。

.schema employee

これも同じことを行います:

SELECT SQL
FROM sqlite_master
WHERE tbl_name = 'employee';

ここでは、sql_masterselect ステートメントを使用して、sqlite_master コマンドの SQL パラメータを抽出しました。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - SQLite Table