上QQ阅读APP看书,第一时间看更新
6.3 删除索引
在MySQL中,删除索引使用ALTER TABLE或者DROP INDEX语句,两者可实现相同的功能。
1.使用ALTER TABLE语句删除索引
用ALTER TABLE语句删除索引的基本语法格式如下:
ALTER TABLE table_name DROP INDEX index_name;
【例6.19】删除book表中的名为UniqidIdx的唯一索引。
首先查看book表中是否有名为UniqidIdx的索引,输入SHOW语句如下:
mysql> SHOW CREATE table book \G *************************** 1. row *************************** Table: book CREATE Table: CREATE TABLE 'book' ( 'bookid' int(11) 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=utf8
从查询结果中可以看到,book表中有名称为UniqidIdx的唯一索引,该索引是在bookid字段上创建的。下面删除该索引,输入删除语句如下:
mysql> ALTER TABLE book DROP INDEX UniqidIdx; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
语句执行完毕,用SHOW语句查看索引是否被删除:
mysql> SHOW CREATE table book \G *************************** 1. row *************************** Table: book CREATE Table: CREATE TABLE 'book' ( 'bookid' int(11) 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=utf8
由结果可以看到,book表中已经没有名为uniqidIdx的唯一索引了,删除索引成功。
提示 添加AUTO_INCREMENT约束字段的唯一索引不能被删除。
2.使用DROP INDEX语句删除索引
用DROP INDEX语句删除索引的基本语法格式如下:
DROP INDEX index_name ON table_name;
【例6.20】删除book表中名为BkAuAndInfoIdx的组合索引。
SQL语句如下:
mysql> DROP INDEX BkAuAndInfoIdx ON book; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
语句执行完毕,用SHOW语句查看索引是否被删除:
mysql> SHOW CREATE table book \G *************************** 1. row *************************** Table: book CREATE Table: CREATE TABLE 'book' ( 'bookid' int(11) 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的组合索引,删除索引成功。
提示 删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成索引的所有列都被删除,则整个索引将被删除。