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 约束,因此,如果要更改约束,则需要先删除约束并重新 创建约束。

SQL Server唯一约束相关推荐

  1. SQL Server 创建约束图解 唯一 主键

    SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束,今天使用SQL Server2008来演示下这几种约束的创 ...

  2. sql server 常见约束

    1.not null 非空约束 ①强制列不接受空值 ②例:创建表时,name varchar(6) not null, 2.unique 唯一性约束 ①约束唯一标识数据库表中的每条记录 ②unique ...

  3. 【译】索引进阶(八):SQL SERVER唯一索引

    [译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 在本章节我们检查唯一索引.唯一索引的特别之处在于它不仅提供了性能益处,而且提供了数据完整性益处.在SQL SER ...

  4. sql server unique约束的增加与删除

     首先,创建一张表table_a CREATE TABLE [dbo].[table_a](  [aID] [int] NULL,  [aNum] [int] NULL ) ON [PRIMARY ...

  5. SQL SERVER 2约束的创建,删除,重命名

    文章目录 删除有依赖列 创建表的时候添加约束 len获取字符串长度 between 添加约束 删除约束 sys.objects 查看当前表中有哪些约束 查看约束信息(ID,type,name) 约束重 ...

  6. SQL Server常用约束表达式实例

    ①.性别只能填写'男'和'女' (字段名 in ('男','女') ) 或 (字段名='男' or 字段名='女') ②.某在数字在0到100之间 (字段名>0 and 字段名<100) ...

  7. SQL SERVER IDENTITY 约束的用法

    identity用法: create table [table] ( [id] int primary key IDENTITY(100,1), [name] text ) id从100开始自动序列增 ...

  8. SQL Server约束

    一.SQL Server主键约束. 主键约束操作基本语句. CREATE TABLE table_name (pk_column data_type PRIMARY KEY,... ); 主键是唯一标 ...

  9. SQL Server中唯一索引和唯一约束之间的区别

    This article gives you an overview of Unique Constraints in SQL and also the Unique SQL Server index ...

最新文章

  1. springmvc十六:视图解析
  2. springmvc学习笔记(10)-springmvc注解开发之商品改动功能
  3. java防止表单重复提交
  4. asp 与 database (3)
  5. JSON和JavaScript对象互转
  6. 在相册查看保存的图片
  7. Linux环境使用命名空间编写一个简单的容器应用程序:namespace,container,cgroups
  8. 5. linux操作系统bios启动过程需要执行哪几个操作?,Linux系统启动的大致过程
  9. mysql 账户余额表_账户表/余额表/消费储蓄表
  10. Android 程序中获取一个反向 Shell
  11. cowpatty无线破解之——WPA-PSK字典攻击
  12. pygame安装教程(window)
  13. 华为交换机Console口密码重置及配置
  14. Blender物理引擎
  15. 【精品整站】WordPress自适应美女写真网站源码/美图整站源码带数据/安装即可运营
  16. 苹果笔记本风扇测试软件,实用的mac电脑风扇控制软件 Macs Fan Control Pro
  17. 软件测试找游戏bug,豪之诺游戏测试常见Bug整理
  18. FPGA-DDRx的VTT电源设计要点
  19. android 生成Excel表
  20. iperf for linux 使用方法

热门文章

  1. Stata面板设置与面板数据多元线性回归与泊松回归命令
  2. nginx安装配置总结
  3. pytorch自定义DataSet
  4. html iframe 空白,JS加载iFrame出现空白问题的解决办法
  5. (附源码)springboot“自律”健身房会员管理系统 毕业设计 456466
  6. Burpsuite验证码识别插件 “captcha-killer-modified“ 使用教程(详细)
  7. Vue CLI 脚手架详解:快速构建 Vue.js 项目的利器
  8. 令人拍案叫绝的JPEG图像压缩原理
  9. 蓝桥杯算法提高VIP-贪吃的大嘴
  10. 公链前沿研究的三大视角 |硬核系列