シェア

はじめに

この記事では、SQLite におけるデータベーステーブルの作成と削除について説明します。これらの2つの用語について簡単に復習しましょう。

  • データベース: 異なる構造とデータのセットを互いに分離します。
  • テーブル: データ構造を定義し、データベース内の実際のデータ値を格納します。

SQLite は、データベースファイルを操作するためにコマンドラインを利用します。 実際に操作するには、お使いのマシンに対応した SQLite CLI をダウンロードする必要があります。それでは始めましょう。

データベースを作成する

まず、コマンドプロンプトに sqlite3 と入力して、新しい SQLite シェルを起動します。 結果は次のようになります。

>sqlite3
SQLite version 3.32.3 2020-06-18 17:32:03
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>

デフォルトでは、SQLite セッションは インメモリデータベース を使用して開始されます。 これは、現在ファイルから読み取っていないことを意味します。

すでに 永続的な データベースがある場合は、.open <FILENAME> コマンドを使用して既存のファイルを開くことができます。 たとえば、次のコマンドでは、既存の test.db データベースが開かれます。

.open test.db

: まだ存在しないファイル名を指定すると、sqlite3 ツールがデータベースファイルを作成します。

新しいデータベースをより明示的に作成するには、--new.open <FILENAME> コマンドに追加します。 ここでは、people.db を作成するコマンドを示します。

.open --new people.db

これにより、既存の変更がセッションの残りの間、指定されたデータベースファイルに保存されます。

データベース接続を一覧表示する

データベースを作成したので、.database コマンドを使用して接続を確認できます。

.database

以下は、コマンドの戻り値がどのようになるかを示しており、main データベースが表示されます。

sqlite> .database
main: /Users/user/people.db
sqlite>

ユースケースによっては、現在の接続に他のデータベースを追加したい場合があります。 これは、ATTACH DATABASE ステートメントを使用して実行できます。以下に、test.db をアクティブな接続に追加する例を示します。

ATTACH DATABASE "test.db" AS test;

ここで .database コマンドを実行すると、main データベースと test データベースの 2 つの接続が返されます。

sqlite> .database
main: /Users/user/people.db
test: /Users/user/test.db
sqlite>

SQLite でデータベース内にテーブルを作成する

データベースを作成し、接続を確認したら、データベースにデータ構造を導入できます。

SQLite の CREATE TABLE コマンドの使用方法

このセクションでは、student テーブルを作成して、新しく作成した people.db データベースにデータ構造を追加します。 データベース内にテーブルを作成するには、次の構文で CREATE TABLE ステートメントを使用します。

CREATE TABLE student (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
age INTEGER,
student_email TEXT NOT NULL,
class TEXT
);

上記のステートメントを以下の部分に分解できます。

  • CREATE TABLE <テーブル名>: これは基本的なコマンドステートメントです。 例では、<テーブル名>student であり、テーブルに付けたい名前である必要があります。
  • <列名> <データ型>: この構文は、テーブル内の基本的な列を定義します。 例では、列名は first_name であり、SQLite データ型 で定義された対応するデータ型は TEXT です。
  • <列制約>: 列 制約 はオプションの制限であり、テーブルに入力するデータに追加の要件を追加します。 例では、列制約 Not Nullstudent_email 列に追加されています。 これにより、この列が入力されない限りエントリが作成されないようになります。
  • <テーブル制約>: 列制約と同様に、テーブル制約はデータに追加の要件を追加するためにオプションです。 ただし、制約が単一の列ではなく複数の列の相互作用に影響を与える場合は例外です。 例では、id フィールドへの PRIMARY KEY の追加は、テーブル制約の例です。

CREATE TABLE ステートメントは、デフォルトで main データベースに指定したテーブルを作成することに注意することが重要です。 データベースへの複数の接続が開いている場合は、main 以外のデータベースにテーブルを作成するために、ステートメントで <データベース>.<テーブル> を指定する必要があります。 前の例を調整すると、test にテーブルを作成するために次のようになります。

CREATE TABLE test.student (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
age INTEGER,
student_email TEXT NOT NULL,
class TEXT
);

テーブルがまだ存在しない場合にのみテーブルを作成する方法

まだ存在しないテーブルを確実に作成するために、オプションの IF NOT EXISTS 句を前の例に次のように追加できます。

CREATE TABLE IF NOT EXISTS student (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
age INTEGER,
student_email TEXT NOT NULL,
class TEXT
);

SQLite は、デフォルトで IF NOT EXISTS 句なしで既に存在するテーブルを作成しようとするとエラーをスローします。 この句を追加すると、デフォルトの動作がオーバーライドされ、エラーではなく警告が表示されます。 コマンドの残りの動作は同じままです。

.schema でテーブルを検証する方法

テーブルを作成したら、.schema コマンドを使用してテーブルの構造を確認できます。 以前に作成した student テーブルが意図したとおりに構造化されていることを確認したい場合は、次の構文を使用して確認できます。

.schema student

返される結果は、student テーブルの場合、次のようになります。

sqlite> .schema student
CREATE TABLE student (id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT, age INTEGER, student_email TEXT NOT NULL, class TEXT);
sqlite>

より読みやすい結果を得るには、.fullschema --indent コマンドを使用できます。 これにより、接続されたデータベースのスキーマがより適切な間隔で表示されます。

.fullschema --indent
sqlite> .fullschema --indent
CREATE TABLE student (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
age INTEGER,
student_email TEXT NOT NULL,
class TEXT
);
sqlite>

: .fullschema コマンドには、統計テーブルが存在する場合は、そのダンプも含まれます。 今のところこれについては説明しませんが、場合によってはこの出力があると役立つことがあります。

テーブルを削除する

SQLite のデータベースからテーブルを削除するには、DROP TABLE ステートメントを使用します。 このステートメントは、student テーブルを削除するために次のように使用されます。

DROP TABLE IF EXISTS student;

IF EXISTS ステートメントは、テーブルを削除するときにオプションです。 これが追加する動作は、コマンドがテーブルが存在する場合にのみ実行されるようにすることです。 存在しない場合、ステートメントは単に無視され、何も起こりません。

データベースを削除する

SQLite には、MySQLPostgreSQL などの他の リレーショナルデータベース のような個別のサーバープロセスがないため、DROP DATABASE ステートメントは必要ありません。 SQLite は組み込みの データベースエンジン であるため、データベースを削除するには、マシンからファイルを削除する必要があります。 このアクションにより、データベースにアクセスできなくなります。

結論

この記事では、SQLite でのデータベースとテーブルの作成および削除の基本について説明しました。 説明したコマンドは、SQLite を開始し、データを整理および構造化するための最も基本的なものです。

CREATE TABLEDROP TABLE などの記述では、ユースケースに応じて検討できる追加のパラメータが多数あります。 これらのステートメントの詳細については、公式 SQLite ドキュメント を参照してください。

著者について
Alex Emerich

Alex Emerich

Alex は、典型的なバードウォッチング、ヒップホップ好きの読書家であり、データベースに関する執筆も楽しんでいます。 彼は現在ベルリンに住んでおり、レオポルド・ブルームのように街を目的もなく歩いている姿が見られます。