📜  mssql 唯一键接受空值 - SQL (1)

📅  最后修改于: 2023-12-03 15:32:59.978000             🧑  作者: Mango

MSSQL唯一键接受空值

在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)参数来允许唯一键接受空值。