SQLite GUI ツールで外部キーを楽々設定:おすすめツール紹介
SQLiteの既存テーブルに外部キーを追加する方法
方法1: ALTER TABLE コマンドを使用する
これは、最も一般的で簡単な方法です。次の構文を使用します。
ALTER TABLE テーブル名
ADD FOREIGN KEY (列名)
REFERENCES 参照テーブル名 (参照列名);
例:
ALTER TABLE 注文
ADD FOREIGN KEY (顧客ID)
REFERENCES 顧客 (顧客ID);
この例では、注文
テーブルに顧客ID
という外部キーを追加します。この外部キーは、顧客
テーブルの顧客ID
列を参照します。
テーブルを再作成する場合は、CREATE TABLE
コマンドを使用して、外部キーを定義できます。次の構文を使用します。
CREATE TABLE テーブル名 (
列名 型,
...
FOREIGN KEY (列名)
REFERENCES 参照テーブル名 (参照列名)
);
CREATE TABLE 注文 (
注文ID INTEGER PRIMARY KEY,
顧客ID INTEGER,
...
FOREIGN KEY (顧客ID)
REFERENCES 顧客 (顧客ID)
);
この例は、注文
テーブルを顧客ID
という外部キーを含むように再作成します。
方法3: SQLite GUI ツールを使用する
SQLite GUI ツールを使用すると、GUI操作で外部キーを追加できます。多くのツールは、テーブル構造を編集するための機能を提供しています。
注意事項
- 外部キーを追加する前に、参照テーブルが存在していることを確認する必要があります。
- 外部キーを追加すると、データの整合性が保たれるようになります。そのため、既存のデータに矛盾がないことを確認する必要があります。
- 外部キーを削除すると、参照しているデータも削除されます。
-- テーブル orders と customers を作成
CREATE TABLE orders (
order_id INTEGER PRIMARY KEY,
customer_id INTEGER
);
CREATE TABLE customers (
customer_id INTEGER PRIMARY KEY,
name TEXT
);
-- orders テーブルに customer_id 列に外部キーを追加
ALTER TABLE orders
ADD FOREIGN KEY (customer_id)
REFERENCES customers (customer_id);
-- 外部キー制約を確認
PRAGMA foreign_keys;
-- 外部キー制約を有効にする
PRAGMA foreign_keys = ON;
-- orders テーブルにデータ挿入
INSERT INTO orders (order_id, customer_id) VALUES (1, 1);
INSERT INTO orders (order_id, customer_id) VALUES (2, 2);
-- 存在しない顧客 ID を挿入しようとするとエラーが発生
INSERT INTO orders (order_id, customer_id) VALUES (3, 3);
-- customers テーブルから顧客を削除すると、orders テーブルからも関連するデータが削除される
DELETE FROM customers WHERE customer_id = 1;
SELECT * FROM orders;
-- テーブル orders を再作成
DROP TABLE orders;
CREATE TABLE orders (
order_id INTEGER PRIMARY KEY,
customer_id INTEGER,
FOREIGN KEY (customer_id)
REFERENCES customers (customer_id)
);
-- データ挿入
INSERT INTO orders (order_id, customer_id) VALUES (1, 1);
INSERT INTO orders (order_id, customer_id) VALUES (2, 2);
-- 外部キー制約を確認
PRAGMA foreign_keys;
SQLite GUI ツールを使用して、テーブル構造を編集し、外部キーを追加できます。具体的な方法は、使用するツールによって異なります。
SQLite の既存テーブルに外部キーを追加するその他の方法
上記で説明した方法に加えて、ALTER TABLE
コマンドを使用して、外部キー制約の ON/OFF を切り替えることができます。
-- 外部キー制約を無効にする
ALTER TABLE orders
DISABLE FOREIGN KEY CONSTRAINT fk_orders_customers;
-- 外部キー制約を有効にする
ALTER TABLE orders
ENABLE FOREIGN KEY CONSTRAINT fk_orders_customers;
方法2: VACUUM コマンドを使用する
VACUUM
コマンドを実行すると、データベースファイルが圧縮され、不要なスペースが解放されます。外部キー制約を無効にした後にVACUUM
コマンドを実行すると、ディスク容量を節約できます。
-- 外部キー制約を無効にする
ALTER TABLE orders
DISABLE FOREIGN KEY CONSTRAINT fk_orders_customers;
-- データベースファイルを圧縮
VACUUM;
-- 外部キー制約を有効にする
ALTER TABLE orders
ENABLE FOREIGN KEY CONSTRAINT fk_orders_customers;
- 外部キー制約を無効にすると、データの整合性が保たれなくなる可能性があります。
VACUUM
コマンドを実行すると、データの順序が変更される可能性があります。
- SQLite の外部キーに関する詳細は、SQLite の公式ドキュメントを参照してください。
- SQLite GUI ツールは、さまざまなものが公開されています。使いやすいツールを選んで使用してください。
sql sqlite foreign-keys