概要 :このチュートリアルでは、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','john.doe@gmail.com');
Code language: SQL (Structured Query Language) (sql) 同じメールアドレスで新しい連絡先を挿入しようとすると、エラーメッセージが表示されます:
INSERT INTO contacts(first_name,last_name,email)
VALUES ('Johnny','Doe','john.doe@gmail.com');
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の使用方法を学びました。 列または列のグループ内のすべての値が一意であることを保証するための制約。