SQLite-制約

制約は、テーブルのデータ列に適用されるルールです。これらは、テーブルに入れることができるデータのタイプを制限するために使用されます。これにより、データベース内のデータの正確性と信頼性が保証されます。

制約は、列レベルまたはテーブルレベルにすることができます。列レベルの制約は1つの列にのみ適用されますが、テーブルレベルの制約はテーブル全体に適用されます。

以下は、SQLiteで使用できる一般的に使用される制約です。

  • NOT NULL Constraint −列にNULL値を含めることができないようにします。

  • DEFAULT Constraint −何も指定されていない場合、列のデフォルト値を提供します。

  • UNIQUE Constraint −列のすべての値が異なることを確認します。

  • PRIMARY Key −データベーステーブルの各行/レコードを一意に識別します。

  • CHECK Constraint −列のすべての値が特定の条件を満たすようにします。

NOTNULL制約

デフォルトでは、列はNULL値を保持できます。列にNULL値を持たせたくない場合は、この列にそのような制約を定義して、その列にNULLが許可されないように指定する必要があります。

NULLはデータがないことと同じではなく、未知のデータを表します。

たとえば、次のSQLiteステートメントはCOMPANYという新しいテーブルを作成し、5つの列を追加します。そのうちの3つ、IDとNAMEとAGEは、NULLを受け入れないように指定します。

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

デフォルトの制約

INSERT INTOステートメントが特定の値を提供しない場合、DEFAULT制約は列にデフォルト値を提供します。

たとえば、次のSQLiteステートメントはCOMPANYという名前の新しいテーブルを作成し、5つの列を追加します。ここで、SALARY列はデフォルトで5000.00に設定されているため、INSERT INTOステートメントがこの列の値を提供しない場合、デフォルトでは、この列は5000.00に設定されます。

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00
);

一意の制約

UNIQUE制約は、2つのレコードが特定の列で同じ値を持つことを防ぎます。たとえば、COMPANYテーブルで、2人以上が同じ年齢にならないようにすることができます。

たとえば、次のSQLiteステートメントはCOMPANYという名前の新しいテーブルを作成し、5つの列を追加します。ここでは、AGE列がUNIQUEに設定されているため、同じ年齢の2つのレコードを持つことはできません。

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL UNIQUE,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00
);

主キーの制約

PRIMARY KEY制約は、データベーステーブル内の各レコードを一意に識別します。UNIQUE列はさらに多くすることができますが、テーブルには主キーが1つだけあります。データベーステーブルを設計するときは、主キーが重要です。主キーは一意のIDです。

これらを使用して、テーブルの行を参照します。テーブル間の関係を作成するとき、主キーは他のテーブルの外部キーになります。「長年のコーディング監視」のため、SQLiteでは主キーがNULLになる可能性があります。これは他のデータベースには当てはまりません。

主キーは、データベーステーブルの各行/レコードを一意に識別するテーブルのフィールドです。主キーには一意の値が含まれている必要があります。主キー列にNULL値を含めることはできません。

テーブルには、単一または複数のフィールドで構成される主キーを1つだけ含めることができます。複数のフィールドが主キーとして使用される場合、それらはcomposite key

テーブルのいずれかのフィールドに主キーが定義されている場合、そのフィールドの値が同じである2つのレコードを持つことはできません。

IDを主キーとしてCOMPANYテーブルを作成した上記のさまざまな例をすでに見てきました。

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

CHECK制約

CHECK制約を使用すると、条件はレコードに入力されている値をチェックできます。条件がfalseと評価された場合、レコードは制約に違反しているため、テーブルに入力されません。

たとえば、次のSQLiteはCOMPANYという新しいテーブルを作成し、5つの列を追加します。ここでは、SALARYを使用したCHECK列を追加して、SALARYゼロを設定できないようにします。

CREATE TABLE COMPANY3(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL    CHECK(SALARY > 0)
);

制約の削除

SQLiteは、ALTERTABLEの限定されたサブセットをサポートします。SQLiteのALTERTABLEコマンドを使用すると、ユーザーはテーブルの名前を変更したり、既存のテーブルに新しい列を追加したりできます。列の名前を変更したり、列を削除したり、テーブルに制約を追加または削除したりすることはできません。