SQL Server唯一约束

本文详细介绍了SQLServer中的UNIQUE约束,包括如何创建、使用和管理此约束。UNIQUE约束用于确保表中列的数据唯一,允许NULL值但仅限一个。与PRIMARY KEY约束不同,UNIQUE约束不强制列的非空性。文章还讨论了如何向已有列添加UNIQUE约束,删除和修改约束,以及比较了UNIQUE约束与PRIMARY KEY约束的区别。
部署运行你感兴趣的模型镜像

SQL Server UNIQUE约束简介 SQL Server UNIQUE 约束用于确保存储在列或列组中的数据在表中的行中是唯一的。 以下语句创建一个表: hr.persons ,其 email 邮件列中的数据在表的行中是唯一的:

CREATE SCHEMA hr;

GO

CREATE TABLE hr.persons(

 person_id INT IDENTITY PRIMARY KEY,

 first_name VARCHAR(255) NOT NULL,

last_name VARCHAR(255) NOT NULL,

 email VARCHAR(255) UNIQUE );

在此语法中,将 UNIQUE 约束定义为列约束。

还可以将 UNIQUE 约束定义为表约束:

CREATE TABLE hr.persons(

person_id INT IDENTITY PRIMARY KEY,

first_name VARCHAR(255) NOT NULL,

last_name VARCHAR(255) NOT NULL,

 email VARCHAR(255), UNIQUE(email) );

SQL Server自动创建 UNIQUE 索引以强制存储在参与 UNIQUE 约束的列中的数据的唯一性。

因此,如果尝试插入重复行,SQL Server将拒绝更改并返回一条错误消息,提示说已违反 UNIQUE 约 束。 以下语句在 hr.persons 表中插入一个新行:

INSERT INTO hr.persons(first_name, last_name, email)

VALUES('Max','Su','maxsu@yiibai.com');

 SQL

上面语句按预期工作。 由于 email 具有 UNIQUE 约束,同一表中 email 列的值不能相同,所以下面插入 语句会失败:

INSERT INTO hr.persons(first_name, last_name, email)

 VALUES('Max2','Su2','maxsu@yiibai.com');

SQL Server发出类似下面错误消息:

Violation of UNIQUE KEY constraint 'UQ__persons__XAXCDXXXXXE8240E4E'.

Cannot insert duplicate key in object 'hr.persons'. The duplicate key value is (maxsu@yiibai.com).

如果没有为 UNIQUE 约束指定名称,SQL Server将自动为其生成名称。 在此示例中,自动生成的约束名称为: UQ__persons__XAXCDXXXXXE8240E4E ,是不是有点不太可读? 要为 UNIQUE 约束指定特定名称,请使用 CONSTRAINT 关键字,如下所示:

CREATE TABLE hr.persons (

person_id INT IDENTITY PRIMARY KEY,

first_name VARCHAR(255) NOT NULL,

last_name VARCHAR(255) NOT NULL,

email VARCHAR(255), CONSTRAINT unique_email UNIQUE(email) );

上面语句中,指定了 UNIQUE 约束名称为: unique_email 。 为 UNIQUE 约束指定名称的好处是: 更容易对错误消息进行分类。 修改约束时,可以引用此约束的名称。

 UNIQUE约束与PRIMARY KEY约束 尽管 UNIQUE 和 PRIMARY KEY 约束都强制数据的唯一性,但是当要强制实现不是主键列的列或列组的唯 一性时,应使用 UNIQUE 约束而不 是 PRIMARY KEY 约束。 与 PRIMARY KEY 约束不同, UNIQUE 约束允许 NULL 值。 此外, UNIQUE 约束将 NULL 视为常规值,因 此,它只允许每列一个 NULL 。 以下语句插入一行,其 email 列中的值为 NULL :

INSERT INTO hr.persons(first_name, last_name)

 VALUES('Yiibai','Su');

现在,如果尝试在 email 列中再插入一个 NULL ,则会收到错误消息:

INSERT INTO hr.persons(first_name, last_name) VALUES('Lily','Lee');

执行上面插入语句,将会提示以下错误:

Violation of UNIQUE KEY constraint 'UQ__persons__AB382E6S7DF0E9W'. Cannot insert duplicate key in object 'hr.persons'. The duplicate key value is ().

具有多列的UNIQUE约束 要为一组列定义 UNIQUE 约束,可以将其写为表约束,列名以逗号分隔,如下所示:

CREATE TABLE table_name (

 key_column data_type PRIMARY KEY,

column1 data_type,

column2 data_type,

column3 data_type, ...,

UNIQUE (column1,column2,...column_n)

);

以下示例创建一个 UNIQUE 约束,此约束包含两列: person_id 和 skill_id :

CREATE TABLE hr.person_skills ( id INT IDENTITY PRIMARY KEY, person_id int, skill_id int, updated_at DATETIME, UNIQUE (person_id, skill_id) );

将UNIQUE约束添加到列 将 UNIQUE 约束添加到表中的现有列或一组列时,SQL Server首先检查这些列中的现有数据,以确保所 有值都是唯一的。 如果SQL Server找到重复值,则它将返回错误,并且不会执行添加 UNIQUE 约束。 以下显示了向表中添加 UNIQUE 约束的语法:

ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(column1, column2,...);

假设有以下 hr.persons 表:

CREATE TABLE hr.persons ( person_id INT IDENTITY PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255), phone VARCHAR(20), );

以下语句向 email 列添加 UNIQUE 约束:

ALTER TABLE hr.persons ADD CONSTRAINT unique_email UNIQUE(email);

类似地,以下语句将向 phone 列添加 UNIQUE 约束:

ALTER TABLE hr.persons ADD CONSTRAINT unique_phone UNIQUE(phone);

删除UNIQUE约束 要删除 UNIQUE 约束,请使用 ALTER TABLE DROP CONSTRAINT 语句,如下所示:

ALTER TABLE table_name DROP CONSTRAINT constraint_name;

以下语句用于从 hr.person 表中删除名称为: unique_phone 的约束:

ALTER TABLE hr.persons DROP CONSTRAINT unique_phone;

修改UNIQUE约束 SQL Server没有任何直接语句来修改 UNIQUE 约束,因此,如果要更改约束,则需要先删除约束并重新 创建约束。

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### SQL Server UNIQUE 约束的作用和使用场景 UNIQUE 约束在 SQL Server 中用于确保表中某一列或多列的值是唯一的,从而防止在这些列中插入重复的数据[^4]。这意味着,如果某列被定义为 UNIQUE 约束,则该列中的所有值都必须唯一,不能出现重复的值。此外,UNIQUE 约束允许存在一个 NULL 值,但每列只能有一个 NULL 值[^4]。 #### UNIQUE 约束的主要作用 1. **数据完整性**:通过 UNIQUE 约束,可以确保某些列的值在整个表中是唯一的,从而避免数据冗余和错误。例如,在用户表中,可以通过 UNIQUE 约束确保用户名或电子邮件地址不重复。 2. **索引创建**:当定义 UNIQUE 约束时,SQL Server 会自动为该列创建一个唯一的索引,以支持快速查询和数据检索。 #### 使用场景 1. **唯一标识符**:虽然主键也可以用于唯一标识记录,但在某些情况下,可能需要对非主键列进行唯一性约束。例如,用户的电子邮件地址或电话号码通常需要保持唯一性。 2. **多列组合唯一性**:UNIQUE 约束不仅可以应用于单列,还可以应用于多个列的组合。这在需要确保某些列的组合值唯一时非常有用。例如,在一个订单表中,可以确保订单号和客户 ID 的组合是唯一的[^1]。 3. **防止数据冗余**:通过 UNIQUE 约束,可以防止在数据库中插入重复的数据,从而提高数据质量。例如,在员工表中,可以通过 UNIQUE 约束确保每个员工的工号或身份证号是唯一的。 #### 定义 UNIQUE 约束的语法 在 SQL Server 中,可以通过以下方式定义 UNIQUE 约束: - **创建表时定义 UNIQUE 约束**: ```sql CREATE TABLE Users ( UserID INT NOT NULL, Username VARCHAR(50) NOT NULL, Email VARCHAR(100), CONSTRAINT uc_Username UNIQUE (Username), CONSTRAINT uc_Email UNIQUE (Email) ); ``` - **在现有表中添加 UNIQUE 约束**: ```sql ALTER TABLE Users ADD CONSTRAINT uc_UserID UNIQUE (UserID); ``` - **删除 UNIQUE 约束**: ```sql ALTER TABLE Users DROP CONSTRAINT uc_UserID; ``` #### 注意事项 1. UNIQUE 约束允许存在一个 NULL 值,但如果列中已经有 NULL 值,则不能再插入另一个 NULL 值[^4]。 2. 在定义多列组合的 UNIQUE 约束时,只有当所有列的值组合在一起是唯一的,约束才会生效。 ### 示例代码 以下是一个完整的示例,展示如何在 SQL Server 中使用 UNIQUE 约束: ```sql -- 创建表并定义 UNIQUE 约束 CREATE TABLE Employees ( EmployeeID INT NOT NULL PRIMARY KEY, Email VARCHAR(100) NOT NULL UNIQUE, PhoneNumber VARCHAR(15) UNIQUE ); -- 向表中插入数据 INSERT INTO Employees (EmployeeID, Email, PhoneNumber) VALUES (1, 'john.doe@example.com', '123-456-7890'); -- 尝试插入重复的 Email 或 PhoneNumber 会失败 INSERT INTO Employees (EmployeeID, Email, PhoneNumber) VALUES (2, 'john.doe@example.com', '987-654-3210'); -- 这将引发错误 -- 删除 UNIQUE 约束 ALTER TABLE Employees DROP CONSTRAINT UC__Employees__Email; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值