SQLite で PRIMARY KEY 制約を使用する例
SQLite テーブル制約 - 複数の列で一意
複合キーは、複数の列で構成されるテーブルの主キーです。複合キーを使用すると、各レコードを一意に識別できます。
UNIQUE
制約を使用して、テーブル内の複数の列の組み合わせを一意に保つことができます。これは、CREATE TABLE
ステートメントまたは ALTER TABLE
ステートメントを使用して行うことができます。
例
次の例では、users
テーブルを作成し、username
と email
列の組み合わせを一意に保つ UNIQUE
制約を追加します。
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
email TEXT NOT NULL,
UNIQUE (username, email)
);
この制約により、同じユーザー名と電子メールアドレスを持つ 2 つのレコードをテーブルに挿入することはできません。
UNIQUE 制約を使用する利点は次のとおりです。
- データの整合性を保つことができます。
- 重複データを排除できます。
- データ検索を効率化できます。
複合キーと UNIQUE 制約は、さまざまな状況で使用できます。
- 顧客データベースで、顧客を一意に識別するために、顧客 ID と氏名を複合キーとして使用できます。
SQLite の UNIQUE
制約を使用して、テーブル内の複数の列の組み合わせを一意に保つことができます。これは、複合キーと呼ばれるものを作成するのに役立ちます。複合キーと UNIQUE 制約は、データの整合性を保ち、重複データを排除し、データ検索を効率化するのに役立ちます。
-- テーブルを作成する
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
email TEXT NOT NULL,
UNIQUE (username, email)
);
-- データを挿入する
INSERT INTO users (username, email) VALUES ("user1", "[email protected]");
INSERT INTO users (username, email) VALUES ("user2", "[email protected]");
-- 重複データを挿入しようとするとエラーが発生する
INSERT INTO users (username, email) VALUES ("user1", "[email protected]");
-- データを取得する
SELECT * FROM users;
-- 結果
-- id | username | email
-- --- | --- | ---
-- 1 | user1 | [email protected]
-- 2 | user2 | [email protected]
このコードは、users
テーブルを作成し、username
と email
列の組み合わせを一意に保つ UNIQUE
制約を追加します。次に、2 つのレコードをテーブルに挿入します。3 番目のレコードを挿入しようとすると、UNIQUE
制約違反エラーが発生します。最後に、SELECT
ステートメントを使用して、テーブル内のすべてのデータを取得します。
他の方法
PRIMARY KEY
制約は、テーブル内の各レコードを一意に識別する必要があります。複合キーを使用して、PRIMARY KEY
制約を作成できます。
例
CREATE TABLE users (
username TEXT NOT NULL,
email TEXT NOT NULL,
PRIMARY KEY (username, email)
);
CHECK
制約を使用して、テーブル内の列の値に制限を適用できます。複合キーを使用して、CHECK
制約を作成できます。
例
CREATE TABLE users (
username TEXT NOT NULL,
email TEXT NOT NULL,
CHECK (username <> '' AND email <> ''),
);
UNIQUE
インデックスは、テーブル内の複数の列の組み合わせの一意性を保証します。ただし、PRIMARY KEY
制約とは異なり、NULL
値を許可できます。
例
CREATE TABLE users (
username TEXT NOT NULL,
email TEXT NOT NULL,
UNIQUE (username, email)
);
この制約により、同じユーザー名と電子メールアドレスを持つ 2 つのレコードをテーブルに挿入することはできません。ただし、空のユーザー名または電子メールアドレスを持つレコードを挿入することはできます。
SQLite では、UNIQUE
制約、PRIMARY KEY
制約、CHECK
制約、UNIQUE
インデックスを使用して、テーブル内の複数の列の組み合わせを一意に保つことができます。どの方法を使用するかは、特定の要件によって異なります。
- 複合キーがテーブル内のレコードを一意に識別する必要がある場合は、
PRIMARY KEY
制約を使用する必要があります。 - 複合キーに
NULL
値を許可する必要がある場合は、UNIQUE
インデックスを使用する必要があります。
sqlite unique-constraint compound-key