-
2019-02-13 14:01:16
mysql数据库: 主键 索引 关系
1.主键:主键的唯一作用就是唯一标识表中的某一行数据。分为单一主键和联合主键:
单一主键:只用一列就能唯一标识一行。
联合主键:当使用一列已经不能唯一标示一行的时候,就要采用多列唯一标识一行,就是联合主键。
2.索引:索引的作用就是提高数据的检索速度,分为单一索引和联合索引:
单一索引:只是用某一列数据作为索引,默认是index索引,这一列可以包含重复数据;如果某一列不存在重复数据最好设置成unique形式的索引,比index的索引速度更快,在text数据上要使用fulltext索引。
联合索引:为了更进一步提高检索速度,每次检索都需要用多列同时进行时,就可以把这多列设为联合索引,提高索引速度,根据多列是否唯一,也分为index索引和unique索引。
联合索引的使用必须注意:不能垮字段使用,比如a b c联合索引 只有a|ab|abc 才能用上联合索引字段。3.主键一定是索引,但是索引不一定是主键。一个表只能有一个主键或联合主键,但是可以有多个索引。
主键字段必须不能为空,但是索引字段可以为空。
---------------------
转自:https://blog.csdn.net/kangsenkangsen/article/details/51234600更多相关内容 -
MySQL 主键与索引的联系与区别分析
2021-01-19 22:24:35下面是主键和索引的一些区别与联系。 1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。 所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一... -
数据库基础知识---主键和索引的关系
2021-07-17 15:36:46主键和索引的关系一. 主键二. 索引三. 主键和索引总结 一. 主键 主键的唯一作用就是唯一标识表中的某一行数据。 分为单一主键和联合主键 单一主键:只用一列就能唯一标识一行。 联合主键:当使用一列已经不能...主键和索引的关系
一. 主键
- 主键的唯一作用就是唯一标识表中的某一行数据。
分为单一主键和联合主键
- 单一主键:只用一列就能唯一标识一行。
- 联合主键:当使用一列已经不能唯一标示一行的时候,就要采用多列唯一标识一行,就是联合主键。
二. 索引
- 索引的作用就是提高数据的检索速度。
分为单一索引和联合索引:
- 单一索引:只是用某一列数据作为索引,默认是index索引,这一列可以包含重复数据;如果某一列不存在重复数据最好设置成unique形式的索引,比index的索引速度更快,在text数据上要使用fulltext索引。
- 联合索引:为了更进一步提高检索速度,每次检索都需要用多列同时进行时,就可以把这多列设为联合索引,提高索引速度,根据多列是否唯一,也分为index索引和unique索引。
三. 主键和索引总结
- 主键一定是索引,但是索引不一定是主键。
- 一个表只能有一个主键或联合主键,但是可以有多个索引。
- 主键字段必须不能为空,但是索引字段可以为空。
-
联合主键和索引
2022-03-30 11:13:59主键和索引的关系为: 1)主键一定是索引; 2)索引是可以自建的,非主键; 3)索引是一种数据结构,方便查找。 联合主键的本质,就是一个联合起来造成的索引,用来作为表的主键。 但联合主键要想用起来,必须...今天,看到一个表,是联合主键的。以前,确实也看到过联合主键,还建立过联合主键。今天,正好看到了,就对联合主键和索引的知识进行重新整理下。
主键和索引的关系为:
1)主键一定是索引;
2)索引是可以自建的,非主键;
3)索引是一种数据结构,方便查找。
联合主键的本质,就是一个联合起来造成的索引,用来作为表的主键。
但联合主键要想用起来,必须采用如下原则:“大哥不能丢,兄弟不能断”。如下所示:
create table test ( name varchar(21), id number, value varchar(20), primary key (name,id,value) )
要想让联合主键生效,必须让第一个索引项name(大哥)存在;同时,如果想用name和value的索引,中间必须用id(兄弟不能断)。
即:
1)用name、id、value,可以用主键索引;(大哥在,兄弟没断)
2)用name、id,,可以用主键索引;(大哥在,兄弟没断)
3)用name,,可以用主键索引;(大哥在)
4)用id、value,不可以用主键索引;(大哥不在)
5)用id,不可以用主键索引;(大哥不在)
6)用value,不可以用主键索引;(大哥不在)
7)用name、value,不可以用主键索引;(大哥在,但兄弟断了)
之所以会存在上门原因,是因为,索引的建立,是通过顺序建立的(先name,再id,再value);如果顺序出现偏误,则无法使用。
-
聚簇索引与主键的选择
2020-12-14 15:21:49聚簇索引与主键的选择一、什么是聚簇索引?二、什么是非聚簇索引?1. InnoDB引擎中2. MyISAM引擎中三、聚簇索引的优劣与主键选择的关系 ...主键索引就是一种聚簇索引,而其他创建出来的前缀索引、联合索引,唯 -
oracle的主键和索引的关系是什么?
2021-05-04 03:13:34删除主键,则主键约束和对应的唯一索引都删除了。这是我们经常见到的现象。发出一个创建主键的sql,oracle其实执行了两步:创建主键约束、创建/关联 唯一索引。步骤是这样的:创建主键约束时,检查该主键字段上是否...满意答案
heteCreardy
推荐于 2019.10.27
采纳率:42% 等级:12
已帮助:5778人
在oracle中,我们创建一个主键,则同时自动创建了一个同名的唯一索引;删除主键,则主键约束和对应的唯一索引都删除了。这是我们经常见到的现象。
发出一个创建主键的sql,oracle其实执行了两步:创建主键约束、创建/关联 唯一索引。步骤是这样的:
创建主键约束时,检查该主键字段上是否已经存在唯一索引。若不存在,则自动创建同名唯一索引;若存在,则直接创建主键约束,并将该约束和已经存在的唯一索引对应上。
删除主键约束时,可以决定是否保留对应的索引;删除唯一索引时,若存在对应的主键约束,则不能删除。
总之,存在主键约束,则肯定存在与之对应的唯一索引,而存在唯一索引,不一定对应着有主键约束。
下面我们验证一下:
SQL> create table test_pri(a number(1), b number(1));
表已创建。
--1.创建主键,则自动创建同名唯一索引
--1.1创建主键,主键约束和唯一索引同时创建
SQL> alter table test_pri add constraint pk_test_pri_a primary key(a);
表已更改。
SQL> select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME
2 from user_constraints where table_name = 'TEST_PRI';
CONSTRAINT_NAME TABLE_NAME INDEX_NAME
----------------- ------------ -------------
PK_TEST_PRI_A TEST_PRI PK_TEST_PRI_A
SQL> select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS
2 from user_indexes where table_name = 'TEST_PRI';
INDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENES
---------------- ------------ ------------ ---------
PK_TEST_PRI_A NORMAL TEST_PRI UNIQUE
--1.2 删除主键,主键约束和对应的唯一索引都删除了
SQL> alter table test_pri drop constraint pk_test_pri_a;
表已更改。
SQL> select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME
2 from user_constraints where table_name = 'TEST_PRI';
未选定行
SQL> select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS
2 from user_indexes where table_name = 'TEST_PRI';
未选定行
--1.3其实删除主键时可以选择保留索引的
SQL> alter table test_pri add constraint pk_test_pri_a primary key(a);
表已更改。
SQL> alter table test_pri drop constraint pk_test_pri_a keep index;
表已更改。
SQL> select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME
2 from user_constraints where table_name = 'TEST_PRI';
未选定行
SQL> select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS
2 from user_indexes where table_name = 'TEST_PRI';
INDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENES
--------------- ----------- ----------- ---------
PK_TEST_PRI_A NORMAL TEST_PRI UNIQUE
--2.在存在唯一索引的列上创建主键,则只创建主键约束,同时将该约束与已有唯一索引关联上(名称可以不一致)
SQL> drop index pk_test_pri_a;
索引已丢弃。
--2.1 先创建唯一索引,再创建主键,名称可以不一致
SQL> create unique index pk_test_pri_a on test_pri(a);
索引已创建。
SQL> alter table test_pri add constraint pk_test_pri primary key(a);
表已更改。
SQL> select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS
2 from user_indexes where table_name = 'TEST_PRI';
INDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENES
--------------- ----------- ------------ ---------
PK_TEST_PRI_A NORMAL TEST_PRI UNIQUE
SQL> select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME
2 from user_constraints where table_name = 'TEST_PRI';
CONSTRAINT_NAME TABLE_NAME INDEX_NAME
------------------ ------------ -------------
PK_TEST_PRI TEST_PRI PK_TEST_PRI_A
--2.2 不可删除存在主键约束的唯一索引
SQL> drop index PK_TEST_PRI_A;
drop index PK_TEST_PRI_A
*
ERROR 位于第 1 行:
ORA-02429: 无法删除用于强制唯一/主键的索引
--2.3虽然两者名称不一致,但也是关联在一块的:删除约束,则对应的索引同时删除
SQL> alter table test_pri drop constraint pk_test_pri;
表已更改。
SQL> select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS
2 from user_indexes where table_name = 'TEST_PRI';
未选定行
SQL> select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME
2 from user_constraints where table_name = 'TEST_PRI';
未选定行
SQL>
10分享举报
-
SQL Server研习录(28)——主键与索引的关系与区别
2020-07-23 16:06:45三、主键和聚集索引的区别四、复合主键的重复值 版权声明 本文原创作者:清风不渡 博客地址:https://blog.csdn.net/WXKKang 此篇博客主要是为了将主键与索引的知识进行一个系统的总结,并将他们的关系与... -
主键索引就是聚集索引?MySQL 索引类型大梳理
2022-03-24 12:01:59之前松哥在前面的文章中介绍 MySQL 的索引时,有小伙伴表示被概念搞晕了,主键索引、非主键索引、聚簇索引、非聚簇索引、二级索引、辅助索引等等,今天咱们就来捋一捋这些概念。 1. 按照功能划分 按照功能来划分,... -
MYSQL:聚簇索引和主键索引
2021-01-19 03:26:59聚簇索引和主键索引聚簇索引并不是一种单独的索引类型,而是一种数据存储方式,具体细节依赖于其实现方式。MySQL数据库中innodb存储引擎,B+树索引可以分为:聚簇索引(也称聚集索引,clustered index)辅助索引(有时... -
Mysql主键索引与非主键索引
2021-11-04 16:07:03Mysql主键索引与非主键索引前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 Mysql使用B+树存储索引。 什么是B树: B树也叫B-树,是一棵多路平衡查找树,平衡的意思是左边和右边分布均匀。多路的... -
关系型数据库中联合主键和唯一索引的应用
2018-12-13 13:53:53在这种关系表中,我们可以确定的是,学生和课程关系虽然是多对多,但一个确定的学生id和一个确定的课程id在关系表中只能存在一个。如下图所示:,业务逻辑就是一个学生只能有当前课程的一个分数。 t_stu... -
主键和索引区别
2019-03-18 16:38:48关系数据库依赖于主键,它是数据库物理模式的基石。...下面是主键和索引的一些区别与联系。 主键一定是唯一性索引,唯一性索引并不一定就是主键。 所谓主键就是能够唯一标识表中某一行的属性或属性组,一个... -
数据库之主键与索引
2020-06-02 18:52:52关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 ... -
MySQL主键和索引的联系及区别
2021-01-19 12:46:15关系数据库依赖于主键,它是数据库物理模式的...下面是主键和索引的一些区别与联系。1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主... -
Mysql的主键和索引
2018-11-19 11:28:51关系数据可依赖于主键,主键在物理层面上主要有两个用途: 唯一的标识一行 因为主键可以唯一标识一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。 作为一个可以被外键引用的对象 一个表的... -
MySQL添加主键、索引
2021-01-18 19:42:03查看索引SHOW INDEX FROM ...添加索引alter table 数据库add index 索引名称(数据库字段名称)主键索引ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )比如:ALTER TABLE order_info ADD PRIMARY KEY (o... -
主键与索引的区别
2020-10-16 10:33:53在数据库关系图中为表定义主zhi键将dao自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。 2、种类不同: 根据数据库的... -
数据表关系模型---- 主键 和 索引
2019-08-21 19:52:16对于关系表,有个很重要的约束,就是任意两条记录不能重复。不能重复不是指两条记录不完全相同,而是指能够通过某个字段唯一区分出不同的记录,这个字段被称为主键。 对主键的要求,最关键的一点是:记录一旦插入... -
复合主键与联合主键、索引与联合(复合)索引
2018-09-24 22:11:31前几天面试时被问到了MySql中联合索引使用与生效问题;回来顺便看了一下复合主键与联合主键,查漏补缺,慢慢学习吧。 一、复合主键与联合主键 1、复合主键:指表的主键含有一个以上的字段组成,不使用无业务含义的... -
MySQL 主键与索引的联系与区别
2017-09-07 19:43:48关系数据库依赖于主键,它是数据库物理模式的基石。主键在物理层面上只有...下面是主键和索引的一些区别与联系。 1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。 所谓主键就是能够唯一标识表中某一行的 -
数据库 主键、外键和索引的区别
2022-04-15 11:58:39主键 ...作用:用来和其他表建立联系用的 作用:一个表可以有多个外键 索引 定义:该字段没有重复值,但是可以有一个空值 作用:是提高查询排序的速度 作用:一个表可以有多个唯一索引 ... -
mysql 主键和默认 设为索引的规则
2021-01-19 04:13:09一、mysql 表中如果是单主键的话,那这个主键也会被 系统默认建为 索引二、mysql 表中如果是复合主键的话,那系统会遵循左对齐原则,即如复合主键 a 和 b字段和c字段..., 默认建的主键索引是abc即主键全有,把所有... -
主键和唯一索引区别
2019-03-06 15:06:021.主键为一种约束,唯一索引为一种索引,本质上就不同; 2.主键创建后一定包含唯一性索引,而唯一索引不一定就是主键;...6.主键和索引都是键,主键是逻辑键,索引为物理键,即主键不实际存在。 ... -
关系数据库中的聚集索引和主键
2019-03-19 01:26:32很多小伙伴在面试的时候会碰到如下一些数据库设计方面的...一般现代关系数据库中,从索引结构角度分,有以下几种索引: B树索引、哈希索引、全文索引 其中本篇文章主题只涉及B树索引,其他两种另外再写,现在先把... -
clickhouse 主键、索引的工作机制
2021-03-24 09:38:12MergeTree的稀疏索引 数据按照主键排序后存储的 每个索引记录对应8192条(由index——grandularity指定) 记录索引是常驻内存的...根据主键的查询条件,确定索引范围。 id in (‘A02’,‘A08’),转化为索引范围区间[A01 -
Mysql 为什么用自增列作为主键?主键与聚集索引的关系
2022-02-17 10:32:24主键:主键(PRIMARY KEY)的完整称呼是“主键约束”,是MySQL中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。在创建数据表时设置主键约束,既可以为表中的一个... -
mysql主键索引、非主键索引、联合索引、覆盖索引、最左匹配、索引下推
2020-07-01 22:36:33mysql主键索引、非主键索引、联合索引、覆盖索引、最左匹配、索引下推
-
oracle <em>索引</em>NULL 博文链接:https://pjz19880808.iteye.com/blog/1739918
-
Lucene创建<em>索引</em>步骤Lucene创建<em>索引</em>步骤: 1、创建Directory(<em>索引</em>位置) 2、创建IndexWrite(写入<em>索引</em>) 3、创建Document对象 4、为
-
android-autoindexer:用于生成数据库<em>索引</em>的 Android 库例如,它将为从其他列引用的<em>主键</em>生成<em>索引</em>。 我们提供Predicate工厂来过滤生成结果: FluentIterable< SQLiteIndex>
-
mysql语句集合包括模糊查询<em>索引</em>函数相应描述mysql使用的sql命令,包括模糊查询<em>和索引</em>,函数等等 平常会使用到的sql都会有
-
java笔试<em>和</em>面试题java笔试<em>和</em>面试题