SQLite - 约束
约束是对表上的数据列强制执行的规则。 这些用于限制可以进入表的数据类型。 这保证了数据库中数据的准确性和可靠性。
约束可以是列级别或表级别。 列级约束仅应用于一列,而表级约束应用于整个表。
以下是 SQLite 中可用的常用约束。
NOT NULL 约束 − 确保列不能有 NULL 值。
DEFAULT 约束 − 未指定时为列提供默认值。
UNIQUE 约束 − 确保列中的所有值都不同。
PRIMARY Key − 唯一标识数据库表中的每一行/记录。
CHECK 约束 − 确保列中的所有值都满足特定条件。
NOT NULL 约束
默认情况下,列可以包含 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 );
DEFAULT 默认约束
当 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 唯一约束
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 主键约束
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 检查约束
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) );
Dropping 约束
SQLite 支持有限的 ALTER TABLE 子集。 SQLite 中的 ALTER TABLE 命令允许用户重命名表或向现有表添加新列。 无法重命名列、删除列或在表中添加或删除约束。