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约束
DEFAULT约束在INSERT INTO语句没有提供具体值时,为列提供默认值。
示例
例如,下面的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列被设置为唯一,这样就不能有两条具有相同年龄的记录。
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约束
主键约束在数据库表中唯一标识每条记录。可以有多个唯一列,但一个表只能有一个主键。主键在设计数据库表时非常重要。主键是唯一的标识符。
我们使用它们来引用表行。在创建表之间的关系时,主键会变成其他表中的外键。由于“长期存在的编码失误”,SQLite中的主键可以是NULL。其他数据库不允许这种情况。
主键是一个表中用于唯一标识每行记录的字段。主键必须包含唯一的值。主键列不能有NULL值。
一个表只能有一个主键,可以由单个或多个字段组成。当多个字段被用作主键时,它们被称为复合键。
如果一个表在任何字段上定义了主键,那么不能有两条记录具有相同的字段值。
示例
您已经在上面的各种示例中看到了我们如何使用ID创建公司表的主键。
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的新表,并添加了五个列。在这里,我们使用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命令允许用户重命名表或向现有表中添加新列。无法重命名列、删除列或向表中添加或移除约束。