sql >> データベース >  >> RDS >> SQLite

SQLiteUNIQUE制約

    概要 :このチュートリアルでは、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の使用方法を学びました。 列または列のグループ内のすべての値が一意であることを保証するための制約。


    1. MSSQLからMySQLに移行する方法

    2. Round()がSQLiteでどのように機能するか

    3. カスタムビルド統計

    4. MySQLで文字列を「アンヘックス」する3つの方法