MySQL DROP INDEX

摘要:在本教程中,您将学习如何使用 MySQL DROP INDEX语句删除表的现有索引。

MySQL DROP INDEX语句语法

要从表中删除现有索引,请使用DROP INDEX语句,如下所示:

DROP INDEX index_name ON table_name
[algorithm_option | lock_option];
Code language: SQL (Structured Query Language) (sql)

在这个语法中:

  • 首先,在DROP INDEX关键字后指定要删除的索引的名称。
  • 其次,指定索引所属的表的名称。

算法

algorithm_option允许您指定用于索引删除的特定算法。下面显示了algorithm_option子句的语法:

ALGORITHM [=] {DEFAULT|INPLACE|COPY}
Code language: SQL (Structured Query Language) (sql)

对于索引删除,支持以下算法:

  • COPY :将表逐行复制到新表,然后对原始表的副本执行DROP INDEX 。不允许并发数据操作语句,例如INSERTUPDATE
  • INPLACE :表在适当的位置重建,而不是复制到新表。 MySQL 在索引删除操作的准备和执行阶段对表发出独占元数据锁。该算法允许并发数据操作语句。

请注意, ALGORITHM子句是可选的。如果跳过它,MySQL 将使用INPLACE 。如果不支持INPLACE ,MySQL 将使用COPY

使用DEFAULT与省略ALGORITHM子句具有相同的效果。

lock_option控制删除索引时表上并发读取和写入的级别。

下面显示了lock_option的语法:

LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
Code language: SQL (Structured Query Language) (sql)

支持以下锁定模式:

  • DEFAULT :这允许您拥有给定算法的最大并发级别。首先,如果支持的话,它允许并发读取和写入。如果不支持,则允许并发读取。如果没有,则强制执行独占访问。
  • NONE :如果支持NONE ,则可以并发读取和写入。否则,MySQL 会发出错误。
  • SHARED :如果支持SHARED ,则可以并发读取,但不能并发写入。如果不支持并发读取,MySQL 会发出错误。
  • EXCLUSIVE :这强制执行独占访问。

MySQL DROP INDEX语句示例

让我们创建一个新表来演示:

CREATE TABLE leads(
    lead_id INT AUTO_INCREMENT,
    first_name VARCHAR(100) NOT NULL,
    last_name VARCHAR(100) NOT NULL,
    email VARCHAR(255) NOT NULL,
    information_source VARCHAR(255),
    INDEX name(first_name,last_name),
    UNIQUE email(email),
    PRIMARY KEY(lead_id)
);
Code language: SQL (Structured Query Language) (sql)

以下语句从leads表中删除name索引:

DROP INDEX name ON leads;
Code language: SQL (Structured Query Language) (sql)

以下语句使用特定算法和锁从leads表中删除email索引:

DROP INDEX email ON leads
ALGORITHM = INPLACE 
LOCK = DEFAULT;
Code language: SQL (Structured Query Language) (sql)

MySQL DROP PRIMARY KEY索引

要删除索引名称为PRIMARY主键,请使用以下语句:

DROP INDEX `PRIMARY` ON table_name;
Code language: SQL (Structured Query Language) (sql)

以下语句创建一个名为t并带有主键的新表:

CREATE TABLE t(
    pk INT PRIMARY KEY,
    c VARCHAR(10)
);
Code language: SQL (Structured Query Language) (sql)

要删除主键索引,请使用以下语句:

DROP INDEX `PRIMARY` ON t;
Code language: SQL (Structured Query Language) (sql)

在本教程中,您学习了如何使用 MySQL DROP INDEX语句删除表的现有索引。

本教程有帮助吗?