Skip to content

唯一值约束

唯一值约束(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做比较。所以唯一值约束键需根据实际情况指定为非空。