首页 > 编程笔记 > MySQL笔记 阅读:3

MySQL删除索引的2种方式(附带实例)

MySQL 中删除索引使用 ALTER TABLE 或者 DROP INDEX 语句,两者可实现相同的功能,DROP INDEX 语句在内部被映射到一个 ALTER TABLE 语句中。

使用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”的组合索引,说明删除索引成功。

删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成索引的所有列都被删除,则整个索引将被删除。

相关文章