MYSQL 创建索引

目录

自动索引

手动创建

主键索引

唯一索引

普通索引

创建复合索引

查看索引

删除主键


自动索引

如果我们为一张表添加主键约束、外键约束、唯一约束时,MYSQL会为对应的列自动创建一个索引。如果不指定任何约束时,MYSQL会自动为每一列生成一个索引并用ROW_ID进行标识。

手动创建

主键索引

主键索引有三种创建方式,分别是:

1.创建表时创建主键

复制代码
-- 创建表的时候指定主键
create table t_pk1(
 id bigint PRIMARY KEY auto_increment,
 name varchar(20)
);
desc t_pk1;

desc t_pk1 是查看 t_pk1表的索引信息

2.创建表时单独指定主键列

复制代码
create table t_pk(
 id bigint  auto_increment,
 name varchar(20),
 PRIMARY KEY(id)
);
desc t_pk;

3.修改表中的列为主键索引

复制代码
create table t_pk2(
 id bigint,  
 name varchar(20)
);

alter table t_pk2 add primary key (id);
alter table t_pk2 modify id bigint auto_increment;

desc t_pk2;

这是未添加之前的,每一列的信息

这是添加之后的,

唯一索引

创建唯一索引的方式有三种,和上面添加主键索引大致上是相同的,故只给出对应的代码部分。

1.创建表时创建唯一键

复制代码
create table t_uk(
 id bigint primary key auto_increment,
 name varchar(20) unique
 );
 
 desc t_uk;

2.创建表时单独指定唯一列

复制代码
create table t_uk1(
 id bigint primary key auto_increment,
 name varchar(20),
 unique (name)
 );
 
 desc t_uk1;

3.修改表中的列为唯一索引

复制代码
create table t_uk2(
 id bigint primary key auto_increment,
 name varchar(20)
 );
 
 alter table t_uk2 add unique (name);
 desc t_uk2;
普通索引

创建时机有:

  1. 创建表时,明确知道某些列频繁查询
  2. 随着业务不断发展,在版本迭代过程中添加索引

我们也可在MYSQL中查看索引信息

复制代码
show index from t_pk1;

普通索引的三种创建方式和上面两种差不多,不过还是有一些不同的。

1.创建表的时候创建普通索引

复制代码
create table t_index1(
 id bigint primary key auto_increment,
 name varchar(20) unique,
 sno varchar(20),
 index (sno)
 );

index 是创建索引的关键字,括号里是索引列

其中:主键索引用PRI表示,唯一索引用UMI表示,普通索引用MUL表示。

2.修改表中的列为普通索引

复制代码
create table t_index2(
 id bigint primary key auto_increment,
 name varchar(20) unique,
 sno varchar(20)
 );
 
 alter table t_index2 add index (sno);

3.单独创建索引并指定索引名

复制代码
create table t_index3(
 id bigint primary key auto_increment,
 name varchar(20) unique,
 sno varchar(20)
 );
 
 create index index_name on t_index3(sno);
创建复合索引

创建符合索引与创建普通索引语法相同,只不过是指定多个列,列与列之间用逗号隔开。

1.创建表时指定索引列

复制代码
create table t_index4(
 id bigint primary key auto_increment,
 name varchar(20) unique,
 sno varchar(20),
 class_id bigint,
 index(sno, class_id)
 );

2.修改表中的列为复合索引

复制代码
create table t_index5(
 id bigint primary key auto_increment,
 name varchar(20) unique,
 sno varchar(20),
 class_id bigint
 );
 
alter table t_index5 add index(sno, class_id);

3.单独创建索引并指定索引名

复制代码
create table t_index6(
 id bigint primary key auto_increment,
 name varchar(20) unique,
 sno varchar(20),
 class_id bigint
 );
 
create index t_index5_sno_class_id on t_index5 (sno, class_id);
查看索引

查看索引的三种方式,在上面都有提到,现在可以进行一下总结

  1. show keys from 表名
  2. show index from表名
  3. desc表名
删除主键

主键索引

alter table表名 drop PRIMARY KEY;

第一次使用删除语句报错的原因是:由于自增列的错误,所以下面是先删除了自增属性,然后重新删除主键。

其他索引

alter table表名 drop index 索引名

相关推荐
底层玩家老张30 分钟前
数据库上K8s,运维为什么反而更累了?从StatefulSet到Operator的复盘
数据库·kubernetes·operator·数据库运维·架构选型
Tisfy1 小时前
LeetCode 2058.找出临界点之间的最小和最大距离:遍历+遇到极值则更新(这种题谁空间复杂度不是O(1)啊)
linux·数据库·leetcode·链表·题解·模拟·遍历
数据库小学妹1 小时前
MySQL死锁排查:锁机制原理、死锁日志与information_schema定位
运维·数据库·mysql
2601_967338711 小时前
Text2SQL智能体基础到实战课程
数据库·oracle
CadeCode1 小时前
Oracle 逗号拼接字段处理
数据库·后端·性能优化
Sirens.1 小时前
MySQL数据库:视图
数据库·mysql
山岚的运维笔记1 小时前
mysql 专业笔记 -- 第 1 章:MySQL 入门
运维·数据库·笔记·后端·学习·mysql·dba
IT小白杨1 小时前
TikTok小店防封号浏览器实战:2026年多店铺环境隔离与账号安全运营技术解析
开发语言·数据库·安全·php·chrome devtools·指纹浏览器
祢真伟大1 小时前
Oracle含LOB大字段表的存储占用统计
数据库·oracle
Inhand-Victor2 小时前
从 CAN 总线到 AWS IoT:EC312 边缘计算网关实现 CAN 数据云端接入
数据库