SQLite 约束
列约束对列上插入的值强制执行约束和规则,以验证插入的数据。
列约束是在创建表格时在列定义中定义的。
SQLite 主键
主键列上的所有值都应是唯一且非空的
主键可以只应用于一列,也可以应用于列的组合,在后一种情况下,列值的组合对于表中的所有行都应是唯一的。
在表中定义主键有很多不同的方法,例如
- 在列定义中
sqlite
ColumnName INTEGER NOT NULL PRIMARY KEY;
- 单独定义
sqlite
PRIMARY KEY( ColumnName );
- 创建列组合作为主键:
sqlite
PRIMARY KEY(ColumnName1, ColumnName2);
Not null 约束
SQLite Not null 约束可防止列出现空值:
ColumnName INTEGER NOT NULL;
DEFAULT 约束
SQLite 默认约束,如果不在列中插入任何值,则会插入默认值。
例如:
ColumnName INTEGER DEFAULT 0;
如果您编写了插入语句,但没有为该列指定任何值,那么该列的值将为 0。
SQLite UNIQUE 约束
SQLite Unique 约束用于防止列的所有值之间出现重复值。
例如:
EmployeeId INTEGER NOT NULL UNIQUE;
这将强制 EmployeeId 值必须是唯一的,不允许有重复的值。请注意,这只适用于列 “ EmployeeId ” 的值。
SQLite CHECK 约束
SQLite 检查约束用于检查插入值的条件,如果值不符合条件,则不会插入。
Quantity INTEGER NOT NULL CHECK(Quantity > 10);
您不能在 “Quantity ” 列中插入小于 10 的值。
什么是 SQLite 外键?
SQLite 外键是一种约束,用于验证一个表中的值是否存在于与定义了外键的第一个表有关系的另一个表中。
在处理多个表时,如果有两个表相互关联,且有一个共同列。如果要确保在其中一个表中插入的值必须存在于另一个表的列中,则应在共同列上使用 “外键约束”。
在这种情况下,当你尝试在该列插入值时,外键将确保插入的值在表的列中退出。
请注意,SQLite 默认不启用外键约束,必须先运行以下命令启用外键约束:
PRAGMA foreign_keys = ON;
SQLite 从 3.6.19 版开始引入外键约束。
示例
假设我们有两个表:学生表和部门表。
学生表中有一个学生列表,部门表中有一个部门列表。每个学生都属于一个系,即每个学生都有一个 departmentId 列。
现在,我们将看到外键约束是如何帮助确保学生表中的部门 id 值必须存在于部门表中的。

因此,如果我们在 “学生 ”表的 “部门 ID ”上创建了外键约束,那么插入的每个部门 ID 都必须出现在 “部门 ”表中。
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 )
);
要检查外键约束如何防止在与另一个表有关系的表中插入未定义的元素或值,我们将研究下面的示例。
在这个示例中,部门表对学生表有外键约束,因此在学生表中插入的任何部门 ID 值都必须存在于部门表中。如果你试图插入一个不存在于部门表中的部门 ID 值,外键约束将阻止你这样做。
让我们在部门表中插入两个部门 “IT ” 和 “Arts” ,如下所示:
INSERT INTO Departments VALUES(1, 'IT');
INSERT INTO Departments VALUES(2, 'Arts');
这两条语句应将两个部门插入到部门表中,之后运行查询 “SELECT * FROM Departments” ,即可确保插入了两个值:

然后尝试插入一个新学生,其部门 ID 不存在于部门表中:
INSERT INTO Students( StudentName,DepartmentId ) VALUES('John', 5);
该行不会被插入,并且会出现错误提示: FOREIGN KEY 约束失败。