📅  最后修改于: 2023-12-03 15:32:59.978000             🧑  作者: Mango
在MSSQL中,唯一键(unique key)通常用来保证数据库中某个表中的某个字段取值的唯一性。但是,有时候我们希望这个唯一键字段可以接受空值。这时候我们需要用到NULLS能力。
唯一键是一组字段,这组字段的值在表中唯一。它类似于主键,但是不同的是,唯一键允许有空值,而主键则不允许。
在MSSQL中,我们可以通过以下语句创建一个唯一键:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
上面的语句中,我们创建了一个Persons表,其中有一个唯一键UC_Person,该唯一键包括ID和LastName两列。这意味着,当我们插入一条数据时,ID与LastName的组合必须是唯一的。
在上面的语句中,如果我们尝试插入一条数据,LastName为空,我们会得到一个错误提示:
INSERT INTO Persons (ID, LastName, FirstName, Age)
VALUES (1, '', 'John', 25);
-- 报错:Violation of UNIQUE KEY constraint 'UC_Person'. Cannot insert duplicate key in object 'dbo.Persons'. The duplicate key value is (1, ).
因为唯一键不允许为空值。但是,有时候我们需要唯一键字段可以接受空值。这时候我们需要用到NULLS能力。
在MSSQL中,我们可以通过以下语句创建一个唯一键,并允许其为空值:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
WITH
(
ALLOW_NULLS = ON
)
);
上面的语句中,在唯一键定义中添加了参数WITH (ALLOW_NULLS = ON)
,表示允许唯一键接受空值。这样,在插入数据时,即使LastName列为空,也不会报错了:
INSERT INTO Persons (ID, LastName, FirstName, Age)
VALUES (1, '', 'John', 25);
-- 成功插入数据
MSSQL中的唯一键可以保证一个表中某个字段取值的唯一性。默认情况下,唯一键不允许空值。但是,我们可以通过添加WITH (ALLOW_NULLS = ON)
参数来允许唯一键接受空值。