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

MySQL删除索引的两种方法(附带实例)

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

1、使用ALTER TABLE删除索引

ALTER TABLE 删除索引的基本语法格式如下:
ALTER TABLE table_name DROP INDEX index_name;

【实例】删除 book 表中名称为 UniqidIdx 的唯一索引。
首先查看 book 表中是否有名称为 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,
  UNIQUE KEY `UniqidIdx` (`bookid`),
     KEY `BkNameIdx` (`bookname`),
) KEENYG I`NBEk=AIunAnnodDIBn fDoEIFdAxU`L T( `CaHuAtRhSoErTs=`u(t2f08)m,b`4i nCfOoL`L(A5T0E)=)utf8mb4_0900_ai_ci
查询结果可以看到,book 表中有名称为 UniqidIdx 的唯一索引,该索引在 bookid 字段上创建。

下面删除该索引,输入删除语句:
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 约束的字段的唯一索引不能被删除。

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

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

相关文章