📜  在 sql server 中唯一 - SQL (1)

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

在 SQL Server 中唯一 - SQL

在数据库中,我们可能需要确保表中的某些列中的值是唯一的,以便避免数据重复和错误。在 SQL Server 中,你可以使用唯一约束、主键和唯一索引来实现这一点。

唯一约束

唯一约束(Unique Constraint)是一种在表格中确保列中不出现重复值的方法。你可以通过在列定义中使用 UNIQUE 关键字来创建唯一约束,如下所示:

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 值的行插入该表格的操作都将失败。

需要注意的是,唯一约束可以涵盖单个列,也可以跨多个列定义。如果你需要在多列上定义唯一约束,则需要将它们包括在一个括号中,并使用逗号进行分隔。

主键

主键(Primary Key)与唯一约束类似,但它还具有额外的性质:它可以用作表格中的一行的唯一标识符。主键可以被视为特殊的唯一约束,它需要满足以下条件:

  • 包含的列不允许 NULL 值。
  • 必须为每个表格定义一个主键。
  • 主键将自动创建唯一索引,它可以帮助你更快地查找表格中的数据。

你可以在列定义中使用 PRIMARY KEY 关键字来定义主键,如下所示:

CREATE TABLE Persons (
    ID int PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);

上面的代码在 Persons 表格中定义了一个名为 ID 的主键。

唯一索引

唯一索引(Unique Index)是另一种保证列中唯一性的方法。它与唯一约束的区别在于,唯一索引是在底层数据库引擎上实现的,而唯一约束是在逻辑层面上实现的。

你可以在列定义中使用 UNIQUE 关键字来定义唯一索引,如下所示:

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT UC_Person UNIQUE (ID,LastName)
);

CREATE UNIQUE INDEX IDX_Person ON Persons (ID, LastName);

上面的代码在 Persons 表格中创建了一个名为 IDX_Person 的唯一索引,该唯一索引涵盖了 ID 和 LastName 两列。

需要注意的是,虽然唯一索引可以用来确保列中的唯一性,但在某些情况下,唯一约束可能更加适合你的需求。唯一约束可以定义在列级别,而不是表格级别上,这意味着你可以灵活地将其添加到特定的行上。此外,唯一约束所需的空间更小,因为它只需要存储唯一性信息,而不是索引信息。

结论

在 SQL Server 中,唯一约束、主键和唯一索引都可以用来确保列中的唯一性。它们的区别在于实现方式和适用范围。需要根据你的需求选择适当的方法。