Skip to main content

SQLite唯一约束

SQLite唯一约束简介

唯一约束确保一列或一组列中的所有值彼此不同或唯一。

要定义唯一约束,请使用UNIQUE关键字,后跟一列或多列。

可以在列或表级别定义唯一约束。只有在表级别,才能跨多个列定义唯一约束。

下面显示了如何在列级别为列定义唯一约束:

CREATE TABLE table_name(
...,
column_name type UNIQUE,
...
);

或者在餐桌上:

CREATE TABLE table_name(
...,
UNIQUE(column_name)
);

以下说明了如何为多列定义唯一约束:

CREATE TABLE table_name(
...,
UNIQUE(column_name1,column_name2,...)
);

定义唯一约束后,如果尝试插入或更新列中已存在的值,SQLite将发出错误并中止操作。

SQLite唯一约束示例

让我们举一些使用唯一约束的例子。

为一列示例定义唯一约束

以下语句创建了一个名为contacts的新表,该表具有为电子邮件列定义的唯一约束:

CREATE TABLE contacts(
contact_id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
email TEXT NOT NULL UNIQUE
);

以下示例在contacts表中插入新行:

INSERT INTO contacts(first_name,last_name,email)
VALUES ('John','Doe','john.doe@gmail.com');

如果您试图用同一封电子邮件插入新联系人,您将收到一条错误消息:

INSERT INTO contacts(first_name,last_name,email)
VALUES ('Johnny','Doe','john.doe@gmail.com');

以下是错误消息:

Error while executing SQL query on database 'chinook': UNIQUE constraint failed: contacts.email

定义多列的唯一约束示例

以下语句使用为“背景颜色”和“前景颜色”列定义的唯一约束创建“形状”表:

CREATE TABLE shapes(
shape_id INTEGER PRIMARY KEY,
background_color TEXT,
foreground_color TEXT,
UNIQUE(background_color,foreground_color)
);

以下语句将新行插入形状表:

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');

以下语句之所以有效,是因为在“背景颜色”和“前景颜色”列中都没有重复冲突:

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','blue');

但是,由于“背景颜色”和“前景颜色”列中存在重复项,以下语句会导致错误:

INSERT INTO shapes(background_color,foreground_color)
VALUES('red','green');

以下是错误:

Error while executing SQL query on database 'chinook': `UNIQUE` constraint failed: shapes.background_color, shapes.foreground_color

SQLite唯一约束和NULL

SQLite认为所有空值都是不同的,因此,具有唯一约束的列可以有多个空值。

以下语句创建一个名为lists的新表,其电子邮件列具有唯一约束:

CREATE TABLE lists(
list_id INTEGER PRIMARY KEY,
email TEXT UNIQUE
);

以下语句将多个空值插入列表表的电子邮件列中:

INSERT INTO lists(email)
VALUES(NULL),(NULL);

让我们从列表表中查询数据:

SELECT * FROM lists;

以下是输出:

SQLite UNIQUE Constraint Example

如您所见,即使电子邮件列有唯一的约束,它也可以接受多个空值。

在本教程中,您学习了如何使用SQLite UNIQUE约束来确保一列或一组列中的所有值都是唯一的。