SQLite - 约束


约束是对表中的数据列强制执行的规则。它们用于限制可以进入表的数据类型。这保证了数据库中数据的准确性和可靠性。

约束可以是列级或表级。列级约束仅应用于一列,而表级约束应用于整个表。

以下是 SQLite 中常用的约束。

  • NOT NULL 约束- 确保列不能有 NULL 值。

  • DEFAULT Constraint - 未指定时为列提供默认值。

  • UNIQUE Con​​straint - 确保列中的所有值都不同。

  • 主键- 唯一标识数据库表中的每一行/记录。

  • 检查约束- 确保列中的所有值满足特定条件。

非空约束

默认情况下,列可以保存 NULL 值。如果您不希望某列具有 NULL 值,则需要在此列上定义此类约束,指定该列现在不允许使用 NULL。

NULL 与没有数据不同,它代表未知数据。

例子

例如,以下 SQLite 语句创建一个名为 COMPANY 的新表,并添加五个列,其中 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 的新表并添加五列。这里,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 约束可防止两个记录在特定列中具有相同的值。例如,在 COMPANY 表中,您可能希望防止两个或更多人具有相同的年龄。

例子

例如,以下 SQLite 语句创建一个名为 COMPANY 的新表并添加五列。这里,AGE 列设置为 UNIQUE,因此不能有两个具有相同年龄的记录 -

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列,但只能有一个主键。在设计数据库表时主键很重要。主键是唯一的 ID。

我们使用它们来引用表行。在表之间创建关系时,主键将成为其他表中的外键。由于“长期的编码监督”,SQLite 中的主键可以为 NULL。其他数据库则不会出现这种情况。

主键是表中的一个字段,它唯一标识数据库表中的每一行/记录。主键必须包含唯一值。主键列不能有 NULL 值。

一张表只能有一个主键,主键可以由单个或多个字段组成。当多个字段用作主键时,它们称为复合键

如果表在任何字段上定义了主键,则不能有两条记录具有相同的该字段值。

例子

您已经看到了上面的各种示例,其中我们创建了以 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 约束启用条件来检查输入到记录中的值。如果条件计算结果为 false,则该记录违反约束并且不会输入到表中。

例子

例如,以下 SQLite 创建一个名为 COMPANY 的新表并添加五列。在这里,我们添加一个带有 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 支持 ALTER TABLE 的有限子集。SQLite 中的 ALTER TABLE 命令允许用户重命名表或向现有表添加新列。无法重命名列、删除列或添加或删除表中的约束。