MySQL数据库应用案例课堂
上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的组合索引,删除索引成功。

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