唯一约束和唯一索引

之前一直没有刻意去了解唯一约束和唯一索引的区别,只知道建了唯一约束之后自动会创建唯一索引,删除唯一约束之后也会自动删除对应的唯一索引。

今天工作中恰好碰到这个问题,把区别列举如下:

1.创建脚本不一样:

--创建唯一约束可以在建表时就指定:
CREATE TABLE [dbo].[TABLE_NM](
 [CODE] CHAR(4) NOT NULL,
 CONSTRAINT [UK_CODE] UNIQUE NONCLUSTERED ([CODE]),
)
--创建唯一约束也可以使用ALTER TABLE来增加:
ALTER TABLE [dbo].[TABLE_NM] ADD CONSTRAINT [UK_CODE] UNIQUE NONCLUSTERED
(
    [CODE] ASC
)
--创建唯一索引脚本:
CREATE UNIQUE NONCLUSTERED INDEX [UK_CODE] ON [dbo].[TABLE_NM]
(
    [CODE] ASC
)

2.创建后,在SSMS中能看到的区别:

3.其他区别

例如参与事务复制的表必须提前建立主键或者唯一约束,在这里,只有唯一索引就不行了。

时间: 2024-11-01 23:21:04

唯一约束和唯一索引的相关文章

谈谈唯一约束和唯一索引

约束 全称完整性约束,它是关系数据库中的对象,用来存放插入到一个表中一列数据的规则,用来确保数据的准确性和一致性. 索引 数据库中用的最频繁的操作是数据查询,索引就是为了加速表中数据行的检索而创建的一种分散的数据结构.可以把索引类比成书的目录,有目录的肯定比没有目录的书,更方便查找. 唯一约束 保证在一个字段或者一组字段里的数据都与表中其它行的对应数据不同.和主键约束不同,唯一约束允许为 NULL,只是只能有一行. 唯一索引 不允许具有索引值相同的行,从而禁止重复的索引或键值. 唯一约束和唯一索

MYSQL中唯一约束和唯一索引的区别

1.唯一约束和唯一索引,都可以实现列数据的唯一,列值可以有null.2.创建唯一约束,会自动创建一个同名的唯一索引,该索引不能单独删除,删除约束会自动删除索引.唯一约束是通过唯一索引来实现数据的唯一.3.创建一个唯一索引,这个索引就是独立,可以单独删除.4.如果一个列上想有约束和索引,且两者可以单独的删除.可以先建唯一索引,再建同名的唯一约束.5.如果表的一个字段,要作为另外一个表的外键,这个字段必须有唯一约束(或是主键),如果只是有唯一索引,就会报错. 约束是业务检查,比方说非空约束,chec

【INDEX】Oracle中主键、唯一约束与唯一索引之区别

一.            概述一般在Oracle数据表中,我们都会看到主键,索引,也会看到唯一索引.唯一约束,那么他们有什么区别呢,下面通过一个小实验简单了解一下....http://www.shejiben.com/images/list/1379589/ http://www.shejiben.com/images/list/1379588/ http://www.shejiben.com/images/list/1379587/ http://www.shejiben.com/image

唯一约束 和 唯一索引 有什么区别?

唯一约束可以用于保证在基表中增加一条记录时,一个或多个列值是唯一的.如果已经给一个或以上列定义了唯一约束,那么任何操作都不可能替换这些列中的复制的值.尽管唯一的.系统要求的索引是用来加强唯一约束,但是定义唯一约束和创建唯一索引之间还是有区别的.即使这二者之间都可以增强唯一性,唯一索引允许NULL值并且一般不能用在指示性约束中.换句话说,唯一约束不允许NULL值并能在外键规范中使用( "NULL"的意思就是列值不明确并且和其他值不同,还包括其他NULL值).

Oracle数据库中违反唯一约束的处理

根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知.根据这个定义,多个NULL值的存在应该不违反唯一约束. 实际上Oracle也是如此实现的: SQL> CREATE TABLE T (ID NUMBER); 表已创建. SQL> ALTER TABLE T ADD UNIQUE (ID); 表已更改. SQL> INSERT INTO T VALUES (1); 已创建 1 行. SQL> INSERT INTO T VALUE

Oracle 数据库表中已有重复数据添加唯一键(唯一约束)

Oracle 数据库表中已有重复数据添加唯一键(唯一约束) 问题描述 以 demo 举例,模拟真实场景. 表 TEST_TABLE 有如下字段和数据:id 是主键,code 没有设置键和索引 ID CODE 1 code1 2 code2 3 code2 4 code2 5 code3 通过以上表中数据可以看出 code 是有重复数据的,此时如果我们直接添加唯一键,会报错. 通过 PL/SQL 可视化操作,或者通过 SQL 语句添加(ENABLE NOVALIDATE 的作用是约束新增数据但不会

SQLServer 唯一键约束和唯一索引有什么区别?

以前也想了解到底有什么区别,但是搁着又忘记了,因为我们很少用唯一键约束.直到几天前同事给我个脚本来约束某个字段的唯一性,用的是唯一键约束,这问题又萦绕脑中了.看似有区别,又没发现什么大的区别!实际上也没多大区别,还是测试看看吧. USE [DemoDB] GO CREATE TABLE [dbo].[TableUniqueKey]( id int not null, name varchar(20) null ) GO CREATE TABLE [dbo].[TableUniqueIndex](

组合唯一约束

UNIQUE约束要求,对于列或列组合而言,表中每行的值必须是不同的.UNIQUE约束的怪异之处在于,可以在键列输入NULL值.在键列中,可能有任意数量的包含NULL值得行.UNIQUE约束通过索引来实施.在定义UNIQUE约束时,Oracle将查看键列上的索引,如果不存在,就创建一个.索引(称为B*树索引)的结构不包含NULL值,正因为如此,才允许出现多个包含null的行.选择 WHERE key_column is NULL不使用索引(因为索引不包含NULL),因此总是导致扫描整个表. 所以说

14-SQLite之主键与唯一约束

一.主键 惟一地标识一行(一张表中只能有一个主键) 主键应当是对用户没有意义的(常用于索引) 永远不要更新主键,否则违反对用户没有意义原则 主键不应包含动态变化的数据,如时间戳.创建时间列.修改时间列等 在两个表的关系中,主关键字用来在一个表中引用来自于另一个表中的特定记录 语法: create table 表名称 (列名称1 数据类型 primary key, 列名称2 数据 类型,列名称3 数据类型, ...); 二.唯一约束 用来保证一个列(或一组列)中数据唯一,类似于主键,但跟主键有区别