当前位置:网站首页>【MySQL】索引的创建、查看和删除
【MySQL】索引的创建、查看和删除
2022-07-01 21:42:00 【张艳伟_Laura】
文章目录
一、创建索引
1、在创建表的同时创建索引
使用create table创建表时,除了可以定义列的数据类型外,还可以定义主键约束 外键约束 或者唯一性约束,而不论创建那种约束,在定义约束的同时相当于在指定列上创建了一个索引。
① 创建普通索引
CREATE TABLE book(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
INDEX idx_bname(book_name)
);
② 创建唯一性索引
声明有唯一索引的字段,在添加数据时,要保证唯一性,但是可以添加null
唯一性索引的关键字:unique
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
UNIQUE INDEX uk_idx_cmt(COMMENT)
);
③ 创建主键索引
设定为主键后数据库会自动建立索引,innodb为聚簇索引,语法:
关键字:PRIMARY KEY
#通过定义主键约束的方式定义主键索引
CREATE TABLE book2(
book_id INT PRIMARY KEY ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR
);
注意:删除主键索引:通过删除主键约束的方式来删除主键索引
ALTER TABLE book2
DROP PRIMARY KEY;
修改主键索引:必须先删除掉(drop)原索引,再新建(add)索引
④创建单列索引
CREATE TABLE book3(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
UNIQUE INDEX idx_bname(book_name)
);
⑤ 创建联合索引
CREATE TABLE book4(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
INDEX mul_bid_bname_info(book_id,book_name,info)
);
⑥ 创建全文索引
fulltext全文索引可以用于全文搜素,并且只为char varchar 和text列创建索引。
索引总是对整个列进行,不支持局部(前缀)索引。
CREATE TABLE test4(
id INT NOT NULL,
NAME CHAR(30) NOT NULL,
age INT NOT NULL,
info VARCHAR(255),
FULLTEXT INDEX futxt_idx_info(info(50))
# info(50)属于局部(前缀)索引,当前不支持,只会对当前列进行全部搜索
)
全文索引可以创建多列
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR (200),
body TEXT,
FULLTEXT index (title, body)
) ENGINE = INNODB ;
tips:用于模糊查询
like方式的查询:
SELECT * FROM papers WHERE content LIKE ‘%查询字符串%’;
全文索引用match+against方式查询:
SELECT * FROM papers WHERE MATCH(title,content) AGAINST (‘查询字符串’);
注意点
1. 使用全文索引前,搞清楚版本支持情况;
2. 全文索引比 like + % 快 N 倍,但是可能存在精度问题;
3. 如果需要全文索引的是大量数据,建议先添加数据,再创建索引。
⑦ 创建空间索引
空间索引创建中,要求空间类型的字段必须为 非空 。
举例:创建表test5,在空间类型为GEOMETRY的字段上创建空间索引,SQL语句如下:
CREATE TABLE test5(
geo GEOMETRY NOT NULL,
SPATIAL INDEX spa_idx_geo(geo)
) ENGINE=MyISAM;
2、在已经创建好的表上创建索引
在已经存在的表中创建索引可以使用ALTER TABLE语句或者CREATE INDEX语句。
① 使用alter table语句创建索引
基本语法:alter table …add…
#创建数据表
CREATE TABLE book5(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR
);
# 创建索引 alter table ...add...
# 普通索引
ALTER TABLE book5 ADD INDEX idx_cmt(COMMENT);
# 唯一性索引
ALTER TABLE book5 ADD UNIQUE uk_idx_bname(book_name);
# 联合索引
ALTER TABLE book5 ADD INDEX mul_bid_bname_info(book_id,book_name,info);
② 使用create index创建索引
基本语法:create index…on…
CREATE INDEX语句可以在已经存在的表上添加索引,在MySQL中, CREATE INDEX被映射到一个ALTER TABLE语句上,基本语法结构为:
# 创建数据表
CREATE TABLE book6(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR
);
# 创建索引 create index...on....
# 普通索引
CREATE INDEX idx_cmt ON book6(COMMENT);
# 唯一性索引
CREATE UNIQUE INDEX uk_idx_bname ON book6(book_name);
# 联合索引
CREATE INDEX mul_bid_bname_info ON book6(book_id,book_name,info);
二、查看索引
通过命令查看索引
方式一:
SHOW CREATE TABLE book;
方式二:
SHOW INDEX FROM book;
三、删除索引
1、使用ALTER TABLE删除索引
ALTER TABLE删除索引的基本语法格式如下: ALTER TABLE … DROP INDEX …
ALTER TABLE book5
DROP INDEX idx_cmt;
提示:添加Auto_increment(自增长)约束字段的唯一索引不能被删除
2、使用DROP INDEX语句删除索引
DROP INDEX删除索引的基本语法格式如下: DROP INDEX … ON …
DROP INDEX uk_idx_bname ON book5;
tips:删除联合索引中的相关字段(删除表中字段)
删除联合索引中的相关字段
ALTER TABLE book5
DROP COLUMN book_name;
提示:删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成索引的所有列都被删除,则整个索引将被删除。
边栏推荐
- pytest合集(2)— pytest運行方式
- 最近公共祖先离线做法(tarjan)
- Can I choose to open an account for stock trading on flush? Is it safe?
- Wechat applet, continuously playing multiple videos. Synthesize the appearance of a video and customize the video progress bar
- 功利点没啥!
- PCB线路板塞孔工艺的那些事儿~
- Medium pen test questions: flip the string, such as ABCD, print out DCBA
- 股票手机开户哪个app好,安全性较高的
- 杰理之、产线装配环节【篇】
- Unity uses SQLite
猜你喜欢
Classify boost libraries by function
杰理之、产线装配环节【篇】
Little p weekly Vol.11
基于LSTM模型实现新闻分类
杰理之蓝牙耳机品控和生产技巧【篇】
杰理之、产线装配环节【篇】
企业架构与项目管理的关联和区别
Do you want to make up for the suspended examination in the first half of the year? Including ten examinations for supervision engineers, architects, etc
功利点没啥!
Pytest collection (2) - pytest operation mode
随机推荐
Pytest Collection (2) - mode de fonctionnement pytest
js数组拼接的四种方法[通俗易懂]
CNN convolution neural network principle explanation + image recognition application (with source code) [easy to understand]
基于LSTM模型实现新闻分类
One of the basic learning of function
matlab遍历图像、字符串数组等基本操作
业务可视化-让你的流程图'Run'起来
LIS (longest ascending subsequence) problem that can be understood [easy to understand]
Pytest collection (2) - pytest operation mode
ICML2022 | 基于元语义正则化的介入性对比学习
Medium pen test questions: flip the string, such as ABCD, print out DCBA
Do you want to make up for the suspended examination in the first half of the year? Including ten examinations for supervision engineers, architects, etc
String类型转换BigDecimal、Date类型
Halcon知识:三维重构的一个尝试
What is the difference between consonants and Initials? (difference between initials and consonants)
Introduction à l'ingénierie logicielle (sixième édition) notes d'examen de Zhang haifan
能升职加薪?PMP证书含金量浅析
require与import的区别和使用
最近公共祖先(LCA)在线做法
Burpsuite simple packet capturing tutorial [easy to understand]