概要 :このチュートリアルでは、SQLite UNIQUE
の使用方法を学習します 列または列のグループ内のすべての値が一意であることを保証するための制約。
SQLite UNIQUE
の紹介 制約
UNIQUE
制約により、列または列のグループ内のすべての値が互いに異なるか、一意になります。
UNIQUE
を定義するには 制約、UNIQUE
を使用します キーワードの後に1つ以上の列が続きます。
UNIQUE
を定義できます 列またはテーブルレベルでの制約。テーブルレベルでのみ、UNIQUE
を定義できます 複数の列にまたがる制約。
以下に、UNIQUE
を定義する方法を示します。 列レベルでの列の制約:
CREATE TABLE table_name(
...,
column_name type UNIQUE,
...
);
Code language: SQL (Structured Query Language) (sql)
またはテーブルレベルで:
CREATE TABLE table_name(
...,
UNIQUE(column_name)
);
Code language: SQL (Structured Query Language) (sql)
次に、UNIQUE
を定義する方法を示します。 複数の列の制約:
CREATE TABLE table_name(
...,
UNIQUE(column_name1,column_name2,...)
);
Code language: SQL (Structured Query Language) (sql)
かつてはUNIQUE
制約が定義されています。列にすでに存在する値を挿入または更新しようとすると、SQLiteはエラーを発行し、操作を中止します。
SQLite UNIQUE
制約の例
UNIQUE
の使用例をいくつか見てみましょう 制約。
UNIQUE
の定義 1列の例の制約
次のステートメントは、contacts
という名前の新しいテーブルを作成します UNIQUE
を使用 email
に定義された制約 列:
CREATE TABLE contacts(
contact_id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
email TEXT NOT NULL UNIQUE
);
Code language: SQL (Structured Query Language) (sql)
次の例では、contacts
に新しい行を挿入します テーブル:
INSERT INTO contacts(first_name,last_name,email)
VALUES ('John','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)
同じメールアドレスで新しい連絡先を挿入しようとすると、エラーメッセージが表示されます:
INSERT INTO contacts(first_name,last_name,email)
VALUES ('Johnny','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)
エラーメッセージは次のとおりです。
Error while executing SQL query on database 'chinook': UNIQUE constraint failed: contacts.email
Code language: SQL (Structured Query Language) (sql)
UNIQUE
の定義 複数列の制約の例
次のステートメントは、shapes
を作成します UNIQUE
のあるテーブル background_color
に定義された制約 およびforeground_color
列:
CREATE TABLE shapes(
shape_id INTEGER PRIMARY KEY,
background_color TEXT,
foreground_color TEXT,
UNIQUE(background_color,foreground_color)
);
Code language: SQL (Structured Query Language) (sql)
次のステートメントは、shapes
に新しい行を挿入します テーブル:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)
次のステートメントは、両方のbackground_color
に重複違反がないために機能します およびforeground_color
列:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','blue');
Code language: SQL (Structured Query Language) (sql)
ただし、次のステートメントでは、両方のbackground_color
が重複しているため、エラーが発生します。 およびforeground_color
列:
INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');
Code language: SQL (Structured Query Language) (sql)
エラーは次のとおりです:
Error while executing SQL query on database 'chinook': `UNIQUE` constraint failed: shapes.background_color, shapes.foreground_color
Code language: SQL (Structured Query Language) (sql)
SQLite UNIQUE
制約とNULL
SQLiteはすべてのNULL値が異なるため、UNIQUE
の列を処理します。 制約には複数のNULL値を含めることができます。
次のステートメントは、lists
という名前の新しいテーブルを作成します そのemail
列にUNIQUE
があります 制約:
CREATE TABLE lists(
list_id INTEGER PRIMARY KEY,
email TEXT UNIQUE
);
Code language: SQL (Structured Query Language) (sql)
次のステートメントは、複数のNULL値をemail
に挿入します lists
の列 テーブル:
INSERT INTO lists(email)
VALUES(NULL),(NULL);
Code language: SQL (Structured Query Language) (sql)
lists
からデータをクエリしてみましょう テーブル:
SELECT * FROM lists;
Code language: SQL (Structured Query Language) (sql)
出力は次のとおりです:
ご覧のとおり、メール列にUNIQUE
が含まれていても 制約、複数のNULL値を受け入れることができます。
このチュートリアルでは、SQLite UNIQUE
の使用方法を学びました。 列または列のグループ内のすべての値が一意であることを保証するための制約。