精华内容
下载资源
问答
  • 主键和唯一索引区别

    千次阅读 2021-01-18 19:21:09
    前言:作为一个非开发出身的DBA刚开始对数据库的主键、外键等一系列的词很是困惑,到后面对主键(primary key)唯一索引(Unique Index)又迷糊了很久,后面终于陆续整理清楚了,总结大家分享下;一、相似之处创建...

    前言: 作为一个非开发出身的DBA刚开始对数据库的主键、外键等一系列的词很是困惑,到后面对主键(primary key)和唯一索引(Unique Index)又迷糊了很久,后面终于陆续整理清楚了,总结和大家分享下;

    一、相似之处创建主键的同时会创建一个唯一索引;

    二、区别主键是一种约束,目的是对这个表的某一列进行限制;

    唯一索引是一种索引,索引是数据库表的一个冗余结构,目的是为了更好的查询;

    主键列不允许为空值,而唯一性索引列允许空值;

    一个表最多只能一个主键,但是可以包含多个唯一索引;

    三、测试

    测试步骤:

    3.1 创建一个表

    脚本:create table john as select * from dba_objects where 1=0;(拷贝表的结构)

    3.2 创建主键,检查是否产生唯一索引和约束

    脚本:ALTER TABLE john ADD CONSTRAINT john_PrimaryKey PRIMARY KEY (object_id);   CREATE UNIQUE INDEX john_UniqueKey ON john  (owner);

    查找语句:

    SELECT table_name,table_type,index_name,index_type,uniqueness

    FROM DBA_INDEXES

    WHERE TABLE_NAME='JOHN';

    43dc03dcdf25fc83bb79904c5283028b.png

    3.3 测试再创建唯一索引和主键

    ALTER TABLE john ADD CONSTRAINT john_PrimaryKey_2 PRIMARY KEY (namespace); ---会报错误ORA-02260: 表只能具有一个主键

    CREATE UNIQUE INDEX john_UniqueKey_2 ON john  (timestamp); -----可以创建

    d3dd70a99a77ea08f4fc395fa62d9a29.png

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    本文作者:JOHN

    ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 )

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    展开全文
  • 关系数据库依赖于主键,它是数据库物理模式的...下面是主键和索引的一些区别与联系。1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主...

    关系数据库依赖于主键,它是数据库物理模式的基石。主键在物理层面上只有两个用途:惟一地标识一行。

    作为一个可以被外键有效引用的对象。

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。下面是主键和索引的一些区别与联系。

    1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。

    所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。数据库在设计时,主键起到了很重要的作用。

    主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。

    2.  一个表中可以有多个唯一性索引,但只能有一个主键。

    3. 主键列不允许空值,而唯一性索引列允许空值。

    4. 索引可以提高查询的速度。

    其实主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中,主键一般都要建,主要是用来避免一张表中有相同的记录,索引一般可以不建,但如果需要对该表进行查询操作,则最好建,这样可以加快检索的速度。FAQ

    1. 主键是个什么?

    我来来具体的东西说吧,书大家都看过吧,没看过的找本翻一下,看下它每页是不是有个页码,我们的数据表主键就相当于是这个页码,明白了吧。

    2. 那么索引是什么呢?

    我们还拿书来说,索引相当于书的目录,有了目录我们可以很快的知道这本书的基本内容和结构,数据索引也一样,它可以加快数据表的查询速度。

    3. 主键主索引类比,及其他们的作用?主键是为了标识数据库记录唯一性,不允许记录重复,且键值不能为空,主键也是一个特殊索引。

    数据表中只允许有一个主键,但是可以有多个索引。

    使用主键会数据库会自动创建主索引,也可以在非主键上创建索引,方便查询效率。

    索引可以提高查询速度,它就相当于字典的目录,可以通过它很快查询到想要的结果,而不需要进行全表扫描。

    主键索引外索引的值可以为空。

    主键也可以由多个字段组成,组成复合主键,同时主键肯定也是唯一索引。

    唯一索引则表示该索引值唯一,可以由一个或几个字段组成,一个表可以有多个唯一索引。

    Technorati Tags: mysql

    展开全文
  • 以下回答全部是基于MySQL的InnoDB引擎例如对于下面这一张表如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下如果我们要进行模糊查找,查找name 以“张"开头的所有人的ID,即 sql 语句为...

    1. 什么是最左前缀原则?

    以下回答全部是基于MySQL的InnoDB引擎

    例如对于下面这一张表

    a018ed1d70b4ad5f49611c7a92436c74.png

    如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下

    fc02304eaf546822091e66fe576cda82.png

    如果我们要进行模糊查找,查找name 以“张"开头的所有人的ID,即 sql 语句为

    select ID from table where name like '张%'

    由于在B+树结构的索引中,索引项是按照索引定义里面出现的字段顺序排序的,索引在查找的时候,可以快速定位到 ID 为 100的张一,然后直接向右遍历所有张开头的人,直到条件不满足为止。

    也就是说,我们找到第一个满足条件的人之后,直接向右遍历就可以了,由于索引是有序的,所有满足条件的人都会聚集在一起。

    而这种定位到最左边,然后向右遍历寻找,就是我们所说的最左前缀原则。

    2. 为什么用 B+ 树做索引而不用哈希表做索引?

    1、哈希表是把索引字段映射成对应的哈希码然后再存放在对应的位置,这样的话,如果我们要进行模糊查找的话,显然哈希表这种结构是不支持的,只能遍历这个表。而B+树则可以通过最左前缀原则快速找到对应的数据。

    2、如果我们要进行范围查找,例如查找ID为100 ~ 400的人,哈希表同样不支持,只能遍历全表。

    3、索引字段通过哈希映射成哈希码,如果很多字段都刚好映射到相同值的哈希码的话,那么形成的索引结构将会是一条很长的链表,这样的话,查找的时间就会大大增加。

    3. 主键索引和非主键索引有什么区别?

    例如对于下面这个表(其实就是上面的表中增加了一个k字段),且ID是主键。

    8614e41ea6b9fd95accedc9288ffb5cc.png

    主键索引和非主键索引的示意图如下:

    77ee2e3cda1156586eed50e359bf971b.png

    其中R代表一整行的值。

    从图中不难看出,主键索引和非主键索引的区别是:非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。

    根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。

    1、如果查询语句是 select * from table where ID = 100,即主键查询的方式,则只需要搜索 ID 这棵 B+树。

    2、如果查询语句是 select * from table where k = 1,即非主键的查询方式,则先搜索k索引树,得到ID=100,再到ID索引树搜索一次,这个过程也被称为回表。

    现在,知道他们的区别了吧?

    4. 为什么建议使用主键自增的索引?

    对于这颗主键索引的树

    04ebd3a20f911e6a4f99f54105966cbc.png

    如果我们插入 ID = 650 的一行数据,那么直接在最右边插入就可以了

    6d47aa2a76276044dd77b031b38aa9cf.png

    但是如果插入的是 ID = 350 的一行数据,由于 B+ 树是有序的,那么需要将下面的叶子节点进行移动,腾出位置来插入 ID = 350 的数据,这样就会比较消耗时间,如果刚好 R4 所在的数据页已经满了,需要进行页分裂操作,这样会更加糟糕。

    但是,如果我们的主键是自增的,每次插入的 ID 都会比前面的大,那么我们每次只需要在后面插入就行, 不需要移动位置、分裂等操作,这样可以提高性能。也就是为什么建议使用主键自增的索引。

    展开全文
  • 下面本篇文章就来给大家介绍一下主键索引和普通索引之间的区别 ,希望对你们有所帮助。普通索引普通索引是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:创建索引,例如CREATE ...

    索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。MySQL提供多种索引类型供选择:普通索引 、唯一性索引、主键索引 、全文索引等等。下面本篇文章就来给大家介绍一下主键索引和普通索引之间的区别 ,希望对你们有所帮助。

    92582b16a5a70070ac70af0c50d96437.png

    普通索引

    普通索引是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:

    创建索引,例如CREATE INDEX ON tablename (列的列表);

    修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);

    创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );

    主键索引

    主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。

    主键一般在创建表的时候指定,例如CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) );

    但是,我们也可以通过修改表的方式加入主键,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每个表只能有一个主键。

    区别

    1、普通索引是最基本的索引类型,没有任何限制,值可以为空,仅加速查询。普通索引是可以重复的,一个表中可以有多个普通索引。

    2、主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;索引列的所有值都只能出现一次,即必须唯一。简单来说:主键索引是加速查询 + 列值唯一(不可以有null)+ 表中只有一个。

    展开全文
  • Oracle 添加主键和索引

    千次阅读 2021-05-08 00:35:31
    数据的主键和索引一般情况下都是必须的,特别是表有大量数据的时候,索引和主键更是必不可少,这样可以提供数据的查询效率;一、创建表的同时创建主键约束(1)无命名create table student (studentid int primary key...
  • 数据的主键和索引一般情况下都是必须的,特别是表有大量数据的时候,索引和主键更是必不可少,这样可以提供数据的查询效率;一、创建表的同时创建主键约束(1)无命名create table student (studentid int primary key...
  • 一、什么是索引索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量...
  • oracle主键和索引

    2021-05-07 12:36:15
    主键:能够唯一标识一条记录的字段为主键(亦或主码),不能重复的,不允许为空。作用:用来保证数据完整性个数:主键只能有一个索引:作用:是提高查询排序的...比如性别字段,标示字段比如只有01的情况)建立索引的...
  • 主键和索引区别

    2021-05-18 12:12:24
    1主键是为了标识数据库记录唯一性,不允许记录重复,且键值不能为空,主键也是一个特殊索引。 2.数据表中只允许有一个主键,但是可以有多个索引 3.使用主键数据库会自动创建主索引,也可以在非之间上创建索引,方便...
  • 1)普通索引(INDEX);2)唯一索引(UNIQUE INDEX);3)全文索引(FULLTEXT)(全文索引是MyISAM的一个特殊索引类型,主要用于全文检索);4)单列索引、多列索引;5)组合索引(最左前缀)。普通索引普通索引是最基本的索引类型...
  • 以下回答全部是基于MySQL的InnoDB引擎例如对于下面这一张表如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下如果我们要进行模糊查找,查找name 以“张"开头的所有人的ID,即 sql 语句为...
  • 删除主键,则主键约束对应的唯一索引都删除了。这是我们经常见到的现象。发出一个创建主键的sql,oracle其实执行了两步:创建主键约束、创建/关联 唯一索引。步骤是这样的:创建主键约束时,检查该主键字段上是否...
  • oracle 主键 \索引

    2021-04-30 08:58:25
    删除主键,则主键约束对应的唯一索引都删除了。这是我们经常见到的现象。发出一个创建主键的sql,oracle其实执行了两步:创建主键约束、创建/关联 唯一索引。步骤是这样的:创建主键约束时,检查该主键字段上是否...
  • 聚簇索引与非聚簇索引 假设存在这样一个表,表t1,主键为int类型的id,还有一个int类型的num。 create table t1( int id primary key auto_increment;...可以看出,主键索引的叶子节点存放的是整行数
  • 主键索引主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。在MySQL中,InnoDB数据表的主键...
  • Oracle MySQL 主键索引及分页的区别: 1、主键,Oracle不可以实现自增,mysql可以实现自增。 oracle新建序列,SEQ_USER_Id.Oracle MySQL 主键索引及分页的区别:1、主键,,Oracle不可以实现自增,mysql...
  • 关于MySql数据库主键索引区别

    千次阅读 2021-01-18 21:17:38
    一、什么是索引索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量...
  • 1.主键一定是唯一性索引,唯一性索引并不一定就是主键所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新...
  • 这篇文章主要介绍MySQL 主键索引的联系与区别,使用mysql的朋友可以看下关系数据库依赖于主键,它是数据库物理模式的基石。主键在物理层面上只有两个用途:惟一地标识一行。作为一个可以被外键有效引用的对象。...
  • 下面本篇文章就来给大家介绍一下主键索引和普通索引之间的区别 ,希望对你们有所帮助。 普通索引普通索引是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:创建索引,例如CREATE...
  • 我们先了解下InnoDB引擎表的一些关键特征:InnoDB引擎表是基于B+树的索引组织表(IOT)。每个表都需要有一个聚集索引(clustered ...如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择其作为聚集索引;如果没有显式定...
  • 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。普通索引允许被索引的...
  • (转)仅供自己学习,特此记录Mysql索引概念:说说Mysql索引,看到一个很少比如:索引就好比一本书...Mysql索引主要有两种结构:B+树hash.hash:hsah索引在mysql比较少用,他以把数据的索引以hash形式组织起来,因此当...
  • mysql主键索引

    2021-01-18 18:23:14
    主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。2、外键(foreign key)是用于建立加强两个表数据之间的链接的一列或多列。外键约束主要用来维护两个表...
  • 首先,主索引就是主键索引,辅助索引就是别的索引 MyISAM索引实现: 概述: ​ MyISAM索引文件数据文件是分离的,MyISAM的索引文件仅仅保存数据记录的地址。 在MyISAM中,主索引辅助索引在结构上没有任何区别,...
  • 主键索引区别如下: 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个...主键和唯一索引区别 二、区别 主键是一种约束,目的是对这个表的某一列进行限制; 唯一索引是一种
  • 在数据库关系图中为表定义主键将自动创建主键索引主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一,字段里面的值不能为空。当在查询中使用主键索引时,它还允许对数据的快速访问。主键创建后一定...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 285,419
精华内容 114,167
关键字:

主键和索引的区别

友情链接: LT8619C.zip