SQLite
SQLite でのデータベースとテーブルの作成および削除
はじめに
この記事では、SQLite におけるデータベースとテーブルの作成と削除について説明します。これらの2つの用語について簡単に復習しましょう。
- データベース: 異なる構造とデータのセットを互いに分離します。
- テーブル: データ構造を定義し、データベース内の実際のデータ値を格納します。
SQLite は、データベースファイルを操作するためにコマンドラインを利用します。 実際に操作するには、お使いのマシンに対応した SQLite CLI をダウンロードする必要があります。それでは始めましょう。
データベースを作成する
まず、コマンドプロンプトに sqlite3
と入力して、新しい SQLite シェルを起動します。 結果は次のようになります。
>sqlite3SQLite version 3.32.3 2020-06-18 17:32:03Enter ".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> .databasemain: /Users/user/people.dbsqlite>
ユースケースによっては、現在の接続に他のデータベースを追加したい場合があります。 これは、ATTACH DATABASE
ステートメントを使用して実行できます。以下に、test.db
をアクティブな接続に追加する例を示します。
ATTACH DATABASE "test.db" AS test;
ここで .database
コマンドを実行すると、main
データベースと test
データベースの 2 つの接続が返されます。
sqlite> .databasemain: /Users/user/people.dbtest: /Users/user/test.dbsqlite>
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 Null
がstudent_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 studentCREATE 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 --indentCREATE 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 には、MySQL や PostgreSQL などの他の リレーショナルデータベース のような個別のサーバープロセスがないため、DROP DATABASE
ステートメントは必要ありません。 SQLite は組み込みの データベースエンジン であるため、データベースを削除するには、マシンからファイルを削除する必要があります。 このアクションにより、データベースにアクセスできなくなります。
結論
この記事では、SQLite でのデータベースとテーブルの作成および削除の基本について説明しました。 説明したコマンドは、SQLite を開始し、データを整理および構造化するための最も基本的なものです。
CREATE TABLE
や DROP TABLE
などの記述では、ユースケースに応じて検討できる追加のパラメータが多数あります。 これらのステートメントの詳細については、公式 SQLite ドキュメント を参照してください。
Prisma を使用する場合、Prisma Migrate を使用してデータベースとテーブルを作成できます。 Prisma Migrate を使用した開発 は、宣言的な Prisma スキーマ に基づいてマイグレーションファイルを生成し、それらをデータベースに適用します。