当前位置:网站首页 > SQL数据库编程 > 正文

mysql查看主键索引(mysql主键索引重复创建哪个会生效)



文本目录:

❄️一、索引的介绍:

❄️二、索引的分类:

❄️三、索引的使用:

     1、自动创建:

     2、手动创建:

              1)、主键索引:

               2)、唯一索引:

                3)、普通索引:

     3、创建复合索引:

      4、查看索引:

      5、删除索引:

              1)、删除主键索引:

               2)、删除其他索引:

      6、创建索引的注意事项:

❄️总结


      MySQL 的索引其实是一种数据结构,它可以帮助数据库高效的查询、更新数据表中的数据,索引通过一定的规则排列数据表中的记录,使得对表的查询可以通过 索引来加快速度。

      其实 索引 就像是每本书都有的 目录 一样,通过指向数据行的位置,可以快速的定位和访问表中的数据,比如对于字典中的按笔画、按偏旁部首等来进行快速的查找要查找的字。

使用索引的目的:

      对于使用索引的目的非常的简单,就是提升数据搜索的效率。

对于索引中使用的数据结构是——B+树 

因为:

1、可以保证数据稳定有序,插入和修改都存在比较稳定的时间复杂度

2、非叶子结点仅具有索引作用,所有的数据都存放到叶子结点中

3、所有的叶子节点构成了一个有序的链表,可以遍历所有的数据,并且连接处呢是双向链表


1、主键索引:

      a、当在一个表中使用 PRIMARY KEY 时,自动创建索引,索引的值就是主键值,InnoDB使用其作为 聚集索引 (聚簇索引)

      b、推荐为每一个表都定义一个主键,如果没有逻辑上唯一且非空的列或列集可以使用主键,则添加一个自增列。

2、普通索引:

       a、最基本的索引,没有唯一性的限制

       b、可能为多列创建组合索引,称为复合索引或组全索引

3、唯一索引:

       a、当在表上定义一个唯一键 UNIQUE 时,自动创建唯一索引。

       b、与普通索引类似,但区别在于唯⼀索引的列不允许有重复值。 

4、全文索引:

      a、基于文本列(CHAR、VARCHAR或TEXT列)进行创建,以加快对这些列中包含的数据的查询。

      b、用于全文搜索,仅限于 MyISAM 和 InnoDB 引擎支持使用

5、聚集索引:

       a、与主键索引是同义词

       b、如果没有为表定义 PRIMARY KRY ,InnoDB 将会使用第一个 UNIQUE 和 NOT NULL 的列作为聚集索引。

       c、如果表中没有 PRIMARY KRY 和 合适的 UNIQUE 作为索引,InnoDB 会为新插入的行生成一个行号,并且用 6字节的 ROW_ID 记录,ROW_ID是单调递增的。

6、非聚集索引:

       a、聚集索引以外的索引称之为 非聚集索引或者称为 二级索引

       b、二级索引中的每条记录都包含该行的主键列,以及二级索引指定的列

       c、InnoDB 使用这个主键值来搜索聚集索引中的行,这个过程称为回表查询

      回表查询:通过索引记录中的主键值,再到主键值的索引树中去查询这个主键值就是回表查询

7、索引覆盖:

      a、当一个 select 语句中使用了 普通索引 并且查询列表中的列刚好是创建普通索引时所有的列或者是部分列,这个时候呢,我们就不需要进行 回表查询 去查询要查找的列,直接就可以在普通索引中查找出来。


1)、当我们为一张表添加 主键约束、唯一约束、外键约束的时候呢,MySQL 会为对应的列自动创建一个索引。

2)、如果表不指定约束的时候呢,我们的MySQL会自动为每一列生成一个索引并且ROW_ID 标记。


              1)、主键索引:

方式一:

创建表的时候创建主表。

方式二:

创建表的时候单独指定主键列。

 

 方式三:

修改表中的列为主键索引。

我们先来创建一个表:

这个时候呢,我们来查询 索引来看看: 

我们可以看到这里什么也没有的,那么接下来我们进行添加主键操作

总的代码就是:

 

这里呢就出现了一个新的语法:

alter table 表名 [add(添加) | modify(更改) | drop(删除)] 要修改的内容; 


               2)、唯一索引:

这个唯一索引呢和上面的主键索引是的创建是差不多的,所以我们这里就来简单的来看一下:

方式一:

创建表的时候创建唯一索引。

 

方式二:

创建表的时候单独指定唯一索引。

 

方式三:

修改表中的列为唯一索引 。

 

我们呢,来查询一下对于唯一索引的表的结构:


                3)、普通索引:

对于这个什么时候创建这个索引呢?

1、创建表的时候,明确的了解哪些列是频繁查询的,就进行创建,但是是在数据很多的时候。如果数据少的话,可能全表扫描是比索引的效率是高的。

2、在业务的不断发展的过程中,进行创建


对于普通索引的创建的语法:

index(列,列.....)

方式一:

在创建表的时候指定索引列。

 

我们来看一看对于这个 普通索引 的结构是怎样的:

 这个就是对于普通索引的结构了。


方式二:

修改表中的列为普通索引。

 

这个就是方式二了,和我们上面对于 主键索引 和 唯一索引的方式三是一样额的。


方式三:

这个方式是我们对于创建 普通索引 经常使用的方式。

单独创建索引并指定索引名。

 

我们来看看这个结构:

我们可以看到对于这个 索引名 的这个列呢,使用的是我们设置的名。 

在这里呢,我们又看见了一个新的语法:

创建索引的语法:

create index 索引名 on 表名[(列),(列).....];

这里可以是单个列也可以是多个列进行创建 普通索引。


      对于这个创建复合所以的方式和上面的对于 普通索引 的方式是差不多的,就是在列上进行了增加,列与列之间使用 逗号 隔开。

方式一:

创建表时指定索引列。
 

 

我们来看看对于这个 复合索引 的结构是怎样的:

 方式二:

修改表中的列为复合索引。

 

这些都是比较简单的。

方式三:

单独创建索引并指定索引名。

 


 


   对于这个查看索引呢,我们在上面已经使用过了,我们直接来介绍介绍对于查询的语法结构:

方式一:

show  index  索引名  from 表名;

方式二:

show  keys  from 表名;

方式三:

desc  表名;(这个是简要查询)


              1)、删除主键索引:

     对于删除主键这个索引的操作是和删除其余索引有所不同的,我们来看看:

语法:

alter  table  表名 drop  primary  key;

但是还是达不到直接删除的效果,我们来试试看: 这个是什么意思呢,说明我们的这个主键存在自增的效果,不能进行删除操作,所以我们在删除之前呢,我们要先把 自增 这个操作给改变了


               2)、删除其他索引:

这个删除操作呢,同样也是非常的简单的操作,我们来看看语法:

语法:

alter  table  表名  drop  index  索引名;

 


a、索引应该创建在高频的查询的列上

b、索引需要占用额外的空间

c、对表进行插入、更新和删除操作的时候,同时也会修改索引,会对性能产生影响

d、创建过多的或者不合理的索引会导致性能下降,需要谨慎选择和规划索引


     OK,索引的基础呢到这里就结束了,这个索引也是 MySQL 中十分重要的一个知识了,所以我们要更加深入的了解索引的知识。到这里这个博客就结束了,让我们下次再见~拜拜~~~

到此这篇mysql查看主键索引(mysql主键索引重复创建哪个会生效)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • sql文件(sql文件怎么导入数据库)2025-01-18 07:18:05
  • redhat enterprise 9(redhat enterprise 9 安装MySQL 8)2025-01-18 07:18:05
  • mysql主键(mysql主键查询快还是索引查询快)2025-01-18 07:18:05
  • mysql锁表如何解锁(mysql锁表了)2025-01-18 07:18:05
  • msvcp140.dll丢失的解决方法Win7(msvcp140.dll丢失的解决方法 mysql)2025-01-18 07:18:05
  • mysql和oracle有什么区别(mysql和oracle的关系)2025-01-18 07:18:05
  • mysql导入sql文件跳过错误(mysql导入sql文件报错)2025-01-18 07:18:05
  • mysql 主键重置为0(mysql主键重复报错)2025-01-18 07:18:05
  • sql的数据文件是什么(sql数据库的文件类型)2025-01-18 07:18:05
  • mysql主键语句(mysql主键用uuid)2025-01-18 07:18:05
  • 全屏图片