主键和外键 SQLite 与例子

SQLite 限制

列约束对插入到列中的值强制实施约束和规则,以验证插入的数据。列约束是在创建表时在列定义中定义的。

SQLite 首要的关键

主键列上的所有值都应该是唯一的并且不为空

主键可以仅应用于一列或多列的组合,在后一种情况下,列值的组合对于所有表的行都应该是唯一的。

语法:

有很多不同的方法来定义表上的主键,例如:

  • 在列定义本身中:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • 作为单独的定义:
    PRIMARY KEY(ColumnName);
  • 要创建列组合作为主键:
    PRIMARY KEY(ColumnName1, ColumnName2);

非空约束

SQLite 非空约束可防止列具有空值:

ColumnName INTEGER  NOT NULL;

默认约束

SQLite 默认约束如果您没有在列中插入任何值,则会插入默认值。

对于实施例:

ColumnName INTEGER DEFAULT 0;

如果您编写了插入语句,但没有为该列指定任何值,则该列的值将为 0。

SQLite UNIQUE 约束

SQLite 唯一约束它将防止列的所有值中出现重复值。

例如:

EmployeeId INTEGER NOT NULL UNIQUE;

这将执行 “员工ID” 值必须是唯一的,不允许重复的值。请注意,这适用于列的值 “员工ID” 只。

SQLite 检查约束

SQLite 检查约束检查插入值的条件,如果值与条件不匹配,则不会插入。

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

您不能在 “数量” 列。

SQLite 外键

- SQLite 外键是一种约束,它验证一个表中存在的值是否存在于与定义外键的第一个表有关系的另一个表中。

在处理多个表时,如果两个表彼此相关且有一个共同的列。如果您想确保其中一个表中插入的值必须存在于另一个表的列中,则应该对共同的列使用“外键约束”。

在这种情况下,当您尝试在该列上插入值时,外键将确保插入的值存在于表的列中。

请注意,外键约束在默认情况下未启用 SQLite,您必须先通过运行以下命令来启用它们:

PRAGMA foreign_keys = ON;

外键约束于 SQLite 从 3.6.19 版本开始。

示例 SQLite 外键

假设我们有两张表;学生表和部门表。

学生表包含学生列表,部门表包含部门列表。每个学生都属于一个部门;即每个学生都有一个部门 ID 列。

现在,我们将看到外键约束如何有助于确保学生表中的部门 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 表中的任何 DepartmentId 值都必须存在于 Departments 表中。如果您试图插入 Departments 表中不存在的 DepartmentId 值,外键约束会阻止您这样做。

让我们插入两个部门 “它”“艺术” 进入部门表如下:

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

这两个语句应该将两个部门插入到部门表中,您可以通过运行查询来确保插入了两个值 “从部门中选择*” 在那之后:

SQLite 外键

然后尝试插入一个新学生,其部门 ID 在部门表中不存在:

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

该行将不会被插入,并且您将收到一条错误消息: FOREIGN KEY 约束失败。