SQLite 约束不为空

简介
SQLite 是一种嵌入式数据库引擎,其特点是轻量、灵活且易于集成。虽然SQLite 相比于其他数据库系统有一些限制,但它仍然提供了一些有用的功能和特性,例如约束(Constraints)。
约束是用于强制执行数据库表中数据的有效性和完整性的规则。其中之一是 NOT NULL 约束,它用于确保某个列不接受空值。如果在包含 NOT NULL 约束的列上尝试插入空值,SQLite 将抛出错误。
在本文中,我们将详细讨论 SQLite 中的约束不为空,并提供相关的示例。
创建表并添加约束
在 SQLite 中,我们可以使用 CREATE TABLE 语句来创建一个表,并使用 NOT NULL 约束来确保某个列不为空。
下面是一个创建名为 users 的表,并在该表的 username 列上添加 NOT NULL 约束的示例:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
username TEXT NOT NULL,
age INTEGER
);
在上面的示例中,users 表有三列:id、username 和 age。其中,username 列被定义为 TEXT 类型,并在其后使用 NOT NULL 约束。这意味着在向 users 表中插入数据时,username 列不能为空。
在创建完表之后,我们可以使用 INSERT INTO 语句向 users 表中插入数据。例如:
INSERT INTO users (username, age) VALUES ('JohnDoe', 25);
在上面的示例中,我们向 users 表中插入了一条数据,其中包含 username 和 age 列的值。由于 username 列被定义为 NOT NULL,因此我们需要为其提供一个非空的值。
如果我们尝试将 NULL 值插入到 username 列中,SQLite 将抛出以下错误:
Error: NOT NULL constraint failed: users.username
上述错误指示由于 NOT NULL 约束,插入操作无法成功。
更新已存在的表添加约束
如果要向已经存在的表中添加约束,可以使用 ALTER TABLE 语句。
下面是一个向已经存在的 users 表中添加 NOT NULL 约束的示例:
ALTER TABLE users
ADD CONSTRAINT username_not_null_constraint
CHECK (username IS NOT NULL);
在上面的示例中,我们使用 ALTER TABLE 语句向 users 表中添加了一个名为 username_not_null_constraint 的约束。该约束使用 CHECK 子句,并通过检查 username 列是否不为空来实现。
现在,当我们尝试向 users 表中插入一个 NULL 值到 username 列时,SQLite 将抛出类似以下错误:
Error: CHECK constraint failed: username_not_null_constraint
SQLite 如何处理默认约束
SQLite 不支持直接指定默认约束为 NOT NULL。换句话说,默认约束是可为空的。
但是,我们仍然可以通过结合使用默认值约束和 NOT NULL 约束来实现类似的行为。例如,我们可以为 username 列设置默认值,并使用 NOT NULL 约束。
下面是一个使用默认值约束和 NOT NULL 约束的示例:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
username TEXT DEFAULT 'Guest' NOT NULL,
age INTEGER
);
在上面的示例中,我们为 username 列设置了默认值 'Guest',并使用了 NOT NULL 约束。
在向 users 表中插入数据时,如果没有显式指定 username 的值,将使用默认值 'Guest'。然而,如果尝试插入一个 NULL 值到 username 列,SQLite 将抛出错误。
使用 CHECK 约束确保列值不为空
除了使用 NOT NULL 约束,我们还可以使用 CHECK 约束来确保列值不为空。
下面是一个使用 CHECK 约束的示例:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
username TEXT NOT NULL,
age INTEGER,
CONSTRAINT age_not_null CHECK (age IS NOT NULL)
);
在上面的示例中,我们在 users 表的 age 列上添加了一个 CHECK 约束以确保其值不为空。
在向 users 表中插入数据时,如果尝试将 NULL 值插入到 age 列,SQLite 将抛出以下错误:
Error: CHECK constraint failed: age_not_null
总结
SQLite 提供了 NOT NULL 约束来确保表中某列的值不为空。我们可以在创建表时,或者通过 ALTER TABLE 语句添加约束。如果尝试插入 NULL 值到具有 NOT NULL 约束的列中,SQLite 将抛出错误。
此外,我们还可以使用 CHECK 约束来确保列值不为空。通过在表创建时或 ALTER TABLE 语句中添加 CHECK 约束,我们可以使用自定义逻辑来定义约束条件。
极客教程