SQLite-制約

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

制約は、列レベルまたは表レベルです。 列レベルの制約は1つの列にのみ適用されますが、表レベルの制約は表全体に適用されます。

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

  • * NOT NULL制約*-列にNULL値を設定できないようにします。
  • DEFAULT Constraint -何も指定されていない場合、列のデフォルト値を提供します。
  • UNIQUE Con​​straint -列のすべての値が異なることを保証します。
  • * PRIMARYキー*-データベーステーブル内の各行/レコードを一意に識別します。
  • * CHECK制約*-列のすべての値が特定の条件を満たすことを確認します。

NOT NULL制約

デフォルトでは、列は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
);

デフォルトの制約

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

たとえば、次の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つだけ含めることができます。 複数のフィールドが主キーとして使用される場合、それらは*複合キー*と呼ばれます。

テーブルのいずれかのフィールドで定義された主キーがある場合、そのフィールドの同じ値を持つ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制約を使用すると、レコードに入力される値を条件で確認できます。 条件が偽と評価された場合、レコードは制約に違反しており、テーブルに入力されません。

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

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