🧚 お知らせ!Beekeeper Studioは高速でモダンなオープンソースのSQLite GUIです ダウンロード
2024年6月16日 著者: Matthew Rathbone

はじめに

SQLiteは、リレーショナルデータベースをシンプルかつ効率的に管理できることで知られる人気のデータベースエンジンです。組み込み型のSQLデータベースエンジンであるため、アプリケーション内で直接使われることが多く、別のサーバープロセスを必要としない軽量なデータベースソリューションを提供します。このチュートリアルでは、SQLiteデータベース内のテーブル一覧を表示する方法を解説します。既存のデータベースの構造を把握するときやデバッグ時によく行う作業です。

前提条件

SQLiteがインストールされ、利用できる状態である必要があります。SQLiteデータベースは、コマンドライン、Pythonスクリプト、Beekeeper StudioのようなGUIツールなど、さまざまな方法で操作できます。このガイドでは、どこでも利用できるSQLiteのコマンドラインツールを使用します。

SQLiteデータベースにアクセスする

まず、ターミナルまたはコマンドプロンプトを開き、SQLiteのコマンドラインツールでデータベースにアクセスします。データベースの操作を開始する一般的なコマンドは次のとおりです。

sqlite3 your_database_file.db

‘your_database_file.db’ をSQLiteデータベースファイルのパスに置き換えてください。

.tables コマンドでテーブルを一覧表示する

SQLiteには、アクティブなデータベース内のすべてのテーブルを簡単に一覧表示できる .tables コマンドが用意されています。

SQLiteのコマンドラインシェルで、次のように入力します。

.tables

このコマンドを実行すると、SQLite は現在のデータベース内のすべてのテーブル名を一覧で返します。

出力例:(サンプルデータベース ‘sakila.db’ を使用)

actor                   experiments             payment
address                 film                    rental
category                film_actor              sales_by_film_category
city                    film_category           sales_by_store
country                 film_list               staff
customer                film_text               staff_list
customer_list           inventory               store
events                  language

.tables コマンドの仕組み

SQLiteは、メインデータベースとアタッチされたデータベース内のすべてのテーブルとビューの名前を返すようデータベースに指示します。内部的には、sqlite_master テーブルに対して SELECT コマンドを実行しています。

sqlite_master テーブルをクエリする

より細かく制御したい場合は、テーブル定義を含むデータベースのメタデータを格納している ‘sqlite_master’ テーブルを直接クエリできます。

例:

SELECT name FROM sqlite_master WHERE type='table';

このSQLコマンドは、sqlite_master テーブルのうち type が ‘table’ であるレコードの name 列をすべて取得します。

出力例:(サンプルデータベース ‘sakila.db’ を使用)

---------------
actor
sqlite_sequence
country
city
address
language
category
customer
film
film_actor
film_category
film_text
inventory
staff
store
payment
rental
experiments
events

.schema コマンドでテーブルスキーマを表示する

テーブルの構造、つまり ‘スキーマ’(テーブルの列とそれぞれのデータ型)を確認するには、SQLiteの .schema コマンドを使います。

.schema your_table_name

出力例:(サンプルデータベース ‘sakila.db’ の ‘actor’ テーブルを使用)

CREATE TABLE actor (
  actor_id integer PRIMARY KEY AUTOINCREMENT NOT NULL,
  first_name VARCHAR(45) NOT NULL,
  last_name VARCHAR(45) NOT NULL,
  last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  , "email_address" VARCHAR(255) NULL);
CREATE INDEX idx_actor_last_name ON actor(last_name)
;
CREATE TRIGGER actor_trigger_ai AFTER INSERT ON actor
 BEGIN
  UPDATE actor SET last_update = DATETIME('NOW')  WHERE rowid = new.rowid;
 END;
CREATE TRIGGER actor_trigger_au AFTER UPDATE ON actor
 BEGIN
  UPDATE actor SET last_update = DATETIME('NOW')  WHERE rowid = new.rowid;
 END;

‘your_table_name’ をテーブル名に置き換えてください。

このコマンドは、データベースでそのテーブルを作成した際の CREATE TABLE 文を返します。

SELECT文を使う

別の方法として、sqlite_master テーブルに対する SELECT 文でスキーマを取得することもできます。

SELECT sql FROM sqlite_master WHERE name = 'your_table_name';

このコマンドは、.schema コマンドと同じCREATE TABLE文を、‘INDEX’ と ‘TRIGGER’ 文を除いて返します。

PRAGMA コマンドでテーブル情報を取得する

SQLiteでは、データベースのさまざまな特性を取得できる PRAGMA コマンドを使う方法もあります。便利なPRAGMAコマンドの1つが ‘table_info’ で、テーブルの列に関する情報を取得できます。

‘table_info’ はテーブルを一覧表示するものではありませんが、テーブル一覧のコマンドと組み合わせることで、テーブル名を見つけた直後にその構造を把握できます。

例:

PRAGMA table_info('actor');

出力例:(サンプルデータベース ‘sakila.db’ の ‘actor’ テーブルを使用)

cid  name           type          notnull  dflt_value         pk
---  -------------  ------------  -------  -----------------  --
0    actor_id       INTEGER       1                           1
1    first_name     VARCHAR(45)   1                           0
2    last_name      VARCHAR(45)   1                           0
3    last_update    TIMESTAMP     1        CURRENT_TIMESTAMP  0
4    email_address  VARCHAR(255)  0                           0

各行は ‘actor’ テーブルの1つの列を表し、各フィールドはそれぞれ列の ‘cid’、‘name’、‘type’、‘not null’ の状態、‘default value’、‘primary key’ の情報を示しています。

まとめ

SQLiteでテーブルを一覧表示することは、データベースの管理や調査に欠かせない基本スキルです。手早く一覧を見るなら .tables コマンド、よりプログラム的に扱うなら sqlite_master テーブルへのクエリ、テーブル構造の詳細を知りたいなら PRAGMA 文と、SQLiteにはデータベースを理解し効率よく操作するためのさまざまなツールが揃っています。

SQLiteのテーブルを確認するためのSQLコマンドを理解して書くことにはやりがいがありますが、特に大規模なデータベースを扱う場合は、時間がかかり複雑にもなりがちです。

Beekeeper Studioなら、使いやすいインターフェースでデータベース内のテーブルを扱えるため、多数のテーブルもスムーズに確認できます。

さらに、テーブル名をクリックするだけで、そのテーブルのスキーマが見やすく整理された形式で表示されます。

Beekeeper Studioは無料&オープンソースのSQLite GUIです

まさに求めていたものです。UIはキビキビしていてすっきり、期待どおりに動き、しっかり仕事をこなしてくれます。SQLiteデータベースを扱うのに最適なツールです。 - Andy

Beekeeper Studioは、高速で直感的、使いやすいSQLiteクライアントです。ほかにも多数のデータベースに対応し、Windows、Mac、Linuxで快適に動作します。

BeekeeperのLinux版は100%フル機能。手抜きも機能の妥協も一切ありません。

Beekeeper StudioについてのSQLite利用者の声

Tagser プログラマー見習い(肩書き・勤務先なし)

これを使ってデータベースのクエリや閲覧をするようになって、初めてモデル設計の仕組みを本当に理解できました!学習の道のりでとても助かっています。今のところDjango + sqliteでしか使っていないので、それらを学んでいる人におすすめします。

George Wright

重要な点は2つあります。1つ目は接続性です。SQLiteにはDB Browser for SQLite、MySQLにはMySQL Workbench、PostgreSQLにはpsqlと使い分ける必要がありません。Beekeeperならすべてに対応しています。2つ目はAIです。AI機能が英語をSQLに変換してくれます。