Skip to main content

SQLite非空约束

SQLite非空约束简介

创建表时,可以指定列是否接受所有值。默认情况下,表中的所有列都接受空值,除非显式使用NOTNULL约束。

要为列定义NOTNULL约束,请使用以下语法:

CREATE TABLE table_name (
...,
column_name type_name NOT NULL,
...
);

与主键和CHECK等其他约束不同,您只能在列级别定义NOTNULL约束,而不能在表级别定义NOTNULL约束。

根据SQL标准,主键应始终暗示NOTNULL。但是,SQLite允许主键列中的空值,除非列是整数主键列,或者表是无ROWID表,或者列定义为非空列。

这是由于一些早期版本中的错误造成的。如果修复了这个bug以符合SQL标准,那么它可能会破坏遗留系统。因此,决定在主键列中允许空值。

一旦将NOT NULL约束附加到列,任何将列值设置为NULL的尝试(如插入或更新)都将导致违反约束。

SQLite非空约束示例

以下示例创建了一个名为suppliers的新表:

CREATE TABLE suppliers(
supplier_id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);

在本例中,supplier_id是suppliers表的主键列。因为该列被声明为整数主键,所以它不接受空值。

name列也使用NOTNULL约束声明,因此它只接受非NULL值。

以下语句试图在suppliers表的name列中插入NULL:

INSERT INTO suppliers(name)
VALUES(NULL);

由于NOT NULL约束冲突,该语句失败。以下是错误消息:

SQL Error [19]: [SQLITE_CONSTRAINT]  Abort due to constraint violation (NOT NULL constraint failed: suppliers.name)

在本教程中,您学习了如何使用SQLite NOT NULL约束来确保列中的值不为NULL。