主キーと外部キー SQLite 例を挙げて

SQLite 制約

列制約は、挿入されたデータを検証するために、列に挿入された値に制約とルールを適用します。 列制約は、テーブルの作成時に列定義で定義されます。

SQLite 主キー

主キー列のすべての値は一意である必要があり、null であってはなりません

主キーは XNUMX つの列のみに適用することも、複数の列の組み合わせに適用することもできます。後者の場合、列の値の組み合わせはすべてのテーブルの行で一意である必要があります。

構文:

テーブルに主キーを定義するには、次のようなさまざまな方法があります。

  • 列定義自体では次のようになります。
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • 別の定義として:
    PRIMARY KEY(ColumnName);
  • 列の組み合わせを主キーとして作成するには:
    PRIMARY KEY(ColumnName1, ColumnName2);

NULL でない制約

SQLite Not null 制約は、列が null 値を持つことを防ぎます。

ColumnName INTEGER  NOT NULL;

デフォルトの制約

SQLite デフォルトの制約 列に値を挿入しない場合、代わりにデフォルト値が挿入されます。

例:

ColumnName INTEGER DEFAULT 0;

insert ステートメントを作成し、その列に値を指定しなかった場合、その列の値は 0 になります。

SQLite 一意の制約

SQLite 一意の制約により、列のすべての値の間で値が重複することがなくなります。

具体的な例を挙げますと、以下の通りです。

EmployeeId INTEGER NOT NULL UNIQUE;

これにより、 "従業員ID" 値は一意である必要があり、重複した値は許可されません。 これは列の値に適用されることに注意してください。 "従業員ID" のみ。

SQLite CHECK制約

SQLite チェック制約 挿入された値をチェックする条件。値が条件に一致しない場合、値は挿入されません。

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

10 未満の値を挿入することはできません。 "量" コラム。

SQLite 外部キー

当学校区の SQLite 外部キーは、あるテーブルに存在する値の存在を、外部キーが定義されている最初のテーブルと関係のある別のテーブルに対して検証する制約です。

複数のテーブルを操作しているときに、XNUMX つの列を共有して相互に関連する XNUMX つのテーブルがある場合。 また、一方に挿入された値がもう一方のテーブルの列に必ず存在するようにしたい場合は、その列に共通の「外部キー制約」を使用する必要があります。

この場合、その列に値を挿入しようとすると、外部キーによって、挿入された値がテーブルの列に存在することが保証されます。

外部キー制約はデフォルトでは有効になっていないことに注意してください。 SQLite次のコマンドを実行して、まずそれらを有効にする必要があります。

PRAGMA foreign_keys = ON;

外部キー制約は で導入されました。 SQLite バージョン 3.6.19 以降。

の例 SQLite 外部キー

XNUMX つのテーブルがあると仮定します。 学生と学部。

Student テーブルには学生のリストがあり、Departments テーブルには学部のリストがあります。 各学生はそれぞれの学科に所属しています。 つまり、各学生には、DepartmentId 列があります。

ここで、students テーブルの学部 ID の値が学部テーブルに必ず存在するようにするために、外部キー制約がどのように役立つかを見ていきます。

SQLite 外部キー

したがって、Students テーブルのDepartmentId に外部キー制約を作成した場合、挿入された各DepartmentId はDepartments テーブルに存在する必要があります。

CREATE TABLE [Departments] (
	[DepartmentId] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
	[DepartmentName] NVARCHAR(50)  NULL
);
CREATE TABLE [Students] (
	[StudentId] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
	[StudentName] NVARCHAR(50)  NULL,
	[DepartmentId] INTEGER  NOT NULL,
	[DateOfBirth] DATE  NULL,
	FOREIGN KEY(DepartmentId) REFERENCES Departments(DepartmentId)
);

外部キー制約によって、別のテーブルと関係のあるテーブルに未定義の要素または値が挿入されるのを防ぐ方法を確認するには、次の例を調べます。

この例では、Departments テーブルには Students テーブルに対する外部キー制約があるため、students テーブルに挿入されるデパートメント ID 値はすべて、Departments テーブルに存在する必要があります。 部門テーブルに存在しない部門 ID 値を挿入しようとすると、外部キー制約により挿入できなくなります。

XNUMX つの部門を挿入しましょう "それ"   "芸術" 次のように部門テーブルに追加します。

INSERT INTO Departments VALUES(1, 'IT');
INSERT INTO Departments VALUES(2, 'Arts');

XNUMX つのステートメントは XNUMX つの部門を部門テーブルに挿入する必要があります。クエリを実行すると、XNUMX つの値が挿入されたことを確認できます。 「部門から * を選択」 その後:

SQLite 外部キー

次に、学部のテーブルに存在しない学部 ID を持つ新しい学生を挿入してみます。

INSERT INTO Students(StudentName,DepartmentId) VALUES('John', 5);

行は挿入されず、次のようなエラーが表示されます。 FOREIGN KEY 制約が失敗しました。