唯一值约束
唯一值约束(UNIQUE)与主键约束相似,但它只用于规定某个或者多个字段的取值唯一,一个表可以有多个唯一值约束,但却只能有一个主键约束。
语法格式
sql
unique_constriant_stmt::=
[CONSTRAINT name] UNIQUE (columnList)
参数说明
[CONSTRAINT name]
:可选关键字,用于指定唯一性约束的名称。name
:约束的名称,用于唯一标识该约束。UNIQUE
:关键字,用于定义唯一性约束。(columnList)
:括号内的列名列表,用于指定哪些列组合成唯一性约束。
示例
创建表test_uniq时,创建名为test_uk的唯一值约束,约束键为id与name。
sql
-- 创建表
CREATE TABLE test_uniq(id INTEGER,name CHAR(10),CONSTRAINT test_uk UNIQUE (id,name));
-- 插入数据
INSERT INTO test_uniq (id, name) VALUES (1, 'He');
INSERT INTO test_uniq (id, name) VALUES (2, 'Zhang');
INSERT INTO test_uniq (id, name) VALUES (1, 'Wang');
-- 查询表
SELECT * FROM test_uniq;
ID | NAME |
------------------------------------------------------------------------------
1 | He|
2 | Zhang|
1 | Wang|
-- 插入一条违反唯一性约束的记录,返回错误
INSERT INTO test_uniq (id, name) VALUES (1, 'He');
Error: [E13001] 违反唯一值约束
说明:
唯一值约束与主键约束相比少了字段非空约束,此时若约束键值某个字段或多个字段值为NULL,则唯一值失效,因为NULL无法与NULL做比较。所以唯一值约束键需根据实际情况指定为非空。