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