【完全解説】SQLiteでテーブル構造を確認する方法!DESCRIBEコマンドの代替手段も紹介
MySQLのDESCRIBEコマンドとSQLiteの同等の機能
- カラム名
- データ型
- 主キーかどうか
- NULL値を許容するかどうか
- デフォルト値
DESCRIBEコマンドは、テーブルの構造を理解したり、データ型を確認したりする際に役立ちます。
SQLiteにおける同等の機能
SQLiteには、DESCRIBEコマンドと完全に同じ機能を持つコマンドはありません。しかし、以下の方法で同様の情報を得ることができます。
PRAGMA table_info
コマンドは、テーブルの構造に関する情報を取得するSQLite独自のコマンドです。DESCRIBEコマンドと同様に、以下の情報が表示されます。
- cid (カラムID)
- name (カラム名)
- type (データ型)
- notnull (NULL値を許容するかどうか)
- dflt_value (デフォルト値)
- pk (主キーかどうか)
sqlite_master
テーブルは、SQLiteデータベース内のすべてのテーブルとビューに関する情報を格納するテーブルです。このテーブルを直接クエリすることで、DESCRIBEコマンドと同等の情報を得ることができます。
外部ライブラリ
SQLite用の外部ライブラリの中には、DESCRIBEコマンドと同等の機能を提供するものがあります。例えば、sqlite3
ライブラリにはsqlite3_table_info()
という関数があり、テーブルの構造に関する情報を取得することができます。
MySQL
DESCRIBE テーブル名;
DESCRIBE employees;
出力例:
Field | Type | Null | Key | Default | Extra
------- | -------- | -------- | -------- | -------- | --------
id | int(11) | NO | PRI | NULL | auto_increment
name | varchar(255) | YES | | NULL |
email | varchar(255) | YES | | NULL |
SQLite
PRAGMA table_info
PRAGMA table_info(テーブル名);
例:
PRAGMA table_info(employees);
cid | name | type | notnull | dflt_value | pk
------- | -------- | -------- | -------- | -------- | --------
0 | id | INTEGER | 0 | NULL | 1
1 | name | TEXT | 0 | NULL | 0
2 | email | TEXT | 0 | NULL | 0
sqlite_masterテーブル
SELECT * FROM sqlite_master WHERE type='table' AND name='テーブル名';
SELECT * FROM sqlite_master WHERE type='table' AND name='employees';
type | name | tbl_name | rootpage | sql |
------- | -------- | -------- | -------- | -------- |
table | employees | employees | 2 | CREATE TABLE employees (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
email TEXT
);
外部ライブラリ
sqlite3ライブラリ
#include <sqlite3.h>
int main() {
sqlite3 *db;
sqlite3_stmt *stmt;
int i;
// データベースを開く
sqlite3_open("database.sqlite", &db);
// DESCRIBEコマンドを実行
sqlite3_prepare_v2(db, "DESCRIBE employees", -1, &stmt, NULL);
// 結果を処理
while (sqlite3_step(stmt) == SQLITE_ROW) {
for (i = 0; i < sqlite3_column_count(stmt); i++) {
printf("%s\t", sqlite3_column_text(stmt, i));
}
printf("\n");
}
// データベースを閉じる
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
cid name type notnull dflt_value pk
------- -------- -------- -------- -------- --------
0 id INTEGER 0 NULL 1
1 name TEXT 0 NULL 0
2 email TEXT 0 NULL 0
SQLiteでDESCRIBEコマンドと同等の機能を実現するその他の方法
.schema コマンド
SQLiteのCLIツールであるsqlite3
では、.schema
コマンドを使用してテーブルの構造を表示することができます。
sqlite3 database.sqlite
.schema employees
CREATE TABLE employees (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
email TEXT
);
EXPLAIN QUERY PLAN
を使用して、SELECTクエリの実行計画を表示することができます。実行計画には、テーブルの構造に関する情報も含まれます。
EXPLAIN QUERY PLAN SELECT * FROM employees;
0 | 0 | 0 | SCAN TABLE employees
仮想テーブルを使用して、DESCRIBEコマンドと同等の機能を実現することができます。
CREATE VIRTUAL TABLE employees_info AS
SELECT cid, name, type, notnull, dflt_value, pk
FROM sqlite_master
WHERE type='table' AND name='employees';
SELECT * FROM employees_info;
cid | name | type | notnull | dflt_value | pk
------- | -------- | -------- | -------- | -------- | --------
0 | id | INTEGER | 0 | NULL | 1
1 | name | TEXT | 0 | NULL | 0
2 | email | TEXT | 0 | NULL | 0
GUIツール
SQLite用のGUIツールの中には、テーブルの構造を表示する機能を持つものがあります。例えば、DB Browser for SQLiteは、テーブルを選択して右クリックすることで、DESCRIBEコマンドと同等の情報を表示することができます。
mysql database sqlite