MySQL删除索引的2种方式(附带实例)
MySQL 中删除索引使用 ALTER TABLE 或者 DROP INDEX 语句,两者可实现相同的功能,DROP INDEX 语句在内部被映射到一个 ALTER TABLE 语句中。
首先查看表 book 中是否有名称为“UniqidIdx”的索引,SQL 语句如下:
下面删除该索引,SQL 语句如下:
使用ALTER TABLE删除索引
使用 ALTER TABLE 删除索引的基本语法格式如下:ALTER TABLE table_name DROP INDEX index_name;【实例】删除表 book 中名称为“UniqidIdx”的唯一索引。
首先查看表 book 中是否有名称为“UniqidIdx”的索引,SQL 语句如下:
mysql> SHOW CREATE table book \G *** 1. row *** Table: book CREATE Table: CREATE TABLE `book` ( `bookid` int NOT NULL, `bookname` varchar(255) NOT NULL, `authors` varchar(255) NOT NULL, `info` varchar(255) DEFAULT NULL, `year_publication` year(4) NOT NULL, UNIQUE KEY `UniqidIdx` (`bookid`), KEY `BkNameIdx` (`bookname`), KEY `BkAuAndInfoIdx` (`authors`(20),`info`(50)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci从查询结果中可以看到,表 book 中有名称为“UniqidIdx”的唯一索引,该索引在 bookid 字段上创建。
下面删除该索引,SQL 语句如下:
mysql> ALTER TABLE book DROP INDEX UniqidIdx;语句执行完毕,使用 SHOW 语句查看索引是否被删除:
mysql> SHOW CREATE table book \G *** 1. row *** Table: book CREATE Table: CREATE TABLE `book` ( `bookid` int NOT NULL, `bookname` varchar(255) NOT NULL, `authors` varchar(255) NOT NULL, `info` varchar(255) DEFAULT NULL, `year_publication` year(4) NOT NULL, KEY `BkNameIdx` (`bookname`), KEY `BkAuAndInfoIdx` (`authors`(20),`info`(50)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci由结果可以看到,表 book 中已经没有名称为“uniqidIdx”的唯一索引,说明删除索引成功。
添加 AUTO_INCREMENT 约束字段的唯一索引不能被删除。
使用DROP INDEX语句删除索引
使用 DROP INDEX 删除索引的基本语法格式如下:DROP INDEX index_name ON table_name;【实例】删除表 book 中名称为“BkAuAndInfoIdx”的组合索引,SQL 语句如下:
mysql> DROP INDEX BkAuAndInfoIdx ON book;语句执行完毕,使用 SHOW 语句查看索引是否被删除:
mysql> SHOW CREATE table book \G *** 1. row *** Table: book CREATE Table: CREATE TABLE `book` ( `bookid` int NOT NULL, `bookname` varchar(255) NOT NULL, `authors` varchar(255) NOT NULL, `info` varchar(255) DEFAULT NULL, `year_publication` year(4) NOT NULL, KEY `BkNameIdx` (`bookname`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec)可以看到,表 book 中已经没有名称为“BkAuAndInfoIdx”的组合索引,说明删除索引成功。
删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成索引的所有列都被删除,则整个索引将被删除。