谈谈唯一约束和唯一索引

约束 全称完整性约束,它是关系数据库中的对象,用来存放插入到一个表中一列数据的规则,用来确保数据的准确性和一致性。

索引 数据库中用的最频繁的操作是数据查询,索引就是为了加速表中数据行的检索而创建的一种分散的数据结构。可以把索引类比成书的目录,有目录的肯定比没有目录的书,更方便查找。

唯一约束 保证在一个字段或者一组字段里的数据都与表中其它行的对应数据不同。和主键约束不同,唯一约束允许为 NULL,只是只能有一行

唯一索引 不允许具有索引值相同的行,从而禁止重复的索引或键值。

唯一约束和唯一索引 都是为了保证表中被限制的字段不允许有重复的值,看起来功能是一样的,那为什么要设计这样两种一样的功能呢?

首先创建两个字段值一样的表 t1,t2,并为 t1 表中的 col1 列设置唯一约束。

CREATE TABLE t1 (
    col1 INT(11),
    col2 VARCHAR(20),
    CONSTRAINT t1_uq UNIQUE (col1)
);

CREATE TABLE t2 (
    col1 INT(11),
    col2 VARCHAR(20)
);
 

然后为表 t2 表中的 col1 列设置唯一索引



CREATE UNIQUE INDEX
    t2_idx ON t2 (col1);

  

创建表 t3,并将 t1 表中的 col1 列设置为 t3 表中 col2 列的外键



CREATE TABLE t3 (
    col1 INT(11),
    col2 INT(11),
    col3 VARCHAR(20),
    CONSTRAINT t3_fk FOREIGN KEY (col2) REFERENCES t1 (col1)
);

到此为止,基本上就能得出,唯一约束和唯一索引在 MySQL 数据库里区别了

  1. 概念上不同,约束是为了保证数据的完整性,索引是为了辅助查询;
  2. 创建唯一约束时,会自动的创建唯一索引;
  3. 在理论上,不一样,在实际使用时,基本没有区别。

关于第二条,MySQL 中唯一约束是通过唯一索引实现的,为了保证没有重复值,在插入新记录时会再检索一遍,怎样检索快,当然是建索引了,所以,在创建唯一约束的时候就创建了唯一索引。

4.唯一性索引

如果确定某个数据列只包含彼此各不相同的值,在为这个数据列创建索引的时候,就应该用关键字UNIQUE把它定义为一个唯一索引,Mysql会在有新纪录插入数据表时,自动检查新纪录的这个字段的值是否已经在某个记录的这个字段里出现过了。如果是,mysql将拒绝插入那条新纪录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复

5.索引的优点

5.1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性

5.2.建立索引可以大大提高检索的数据,以及减少表的检索行数

5.3.在表连接的连接条件,可以加速表与表直接的相连

5.4.在分组和排序字句进行数据检索,可以减少查询时间中分组和排序时所消耗的时间(数据库的记录会重新排序)

5.5.建立索引,在查询中使用索引,可以提高性能。

原文地址:https://www.cnblogs.com/mengbin0546/p/10308755.html

时间: 2024-10-16 13:18:23

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

唯一约束和唯一索引

之前一直没有刻意去了解唯一约束和唯一索引的区别,只知道建了唯一约束之后自动会创建唯一索引,删除唯一约束之后也会自动删除对应的唯一索引. 今天工作中恰好碰到这个问题,把区别列举如下: 1.创建脚本不一样: --创建唯一约束可以在建表时就指定: CREATE TABLE [dbo].[TABLE_NM]( [CODE] CHAR(4) NOT NULL, CONSTRAINT [UK_CODE] UNIQUE NONCLUSTERED ([CODE]), ) --创建唯一约束也可以使用ALTER T

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 数据类型, ...); 二.唯一约束 用来保证一个列(或一组列)中数据唯一,类似于主键,但跟主键有区别