MySQL 删除索引

MySQL 删除索引

MySQL允许使用DROP INDEX语句从表中删除现有的索引。要从表中删除索引,我们可以使用以下查询:

mysql>DROP INDEX index_name ON table_name [algorithm_option | lock_option];

如果我们想要删除一个索引,需要两个条件:

  • 首先,我们必须指定我们想要删除的索引的名称。
  • 其次,索引所属的表的名称。

Drop Index 语法包含两个可选项,即算法和锁定,用于在索引修改期间读取和写入表。让我们详细解释一下:

算法选项

算法选项允许我们指定在表中删除索引的特定算法。 algorithm_option 的语法如下:

Algorithm [=] {DEFAULT | INPLACE | COPY}

HTML: 这个算法主要支持两种,即INPLACE和COPY。

COPY: 此算法允许我们将一个表逐行复制到另一个新表,然后对此新表执行DROP Index语句。在这个表上,我们不能对数据进行INSERT和UPDATE操作。

INPLACE: 此算法允许我们重新构建一个表而不是复制原始表。我们可以在这个表上执行所有的数据操作。在这个表上,MySQL在索引删除期间发出一个独占的元数据锁。

注意:如果您未定义算法子句,则MySQL使用INPLACE算法。如果不支持INPLACE,则使用COPY算法。默认算法与不使用任何算法子句的Drop index语句相同。

锁定选项

此子句使我们能够在索引删除期间控制并发读写的级别。lock_option的语法如下:

LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}

在语法中,我们可以看到lock_option包含了 四种模式 ,分别是DEFAULT、NONE、SHARED和EXCLUSIVE。现在,我们将详细讨论所有的模式:

SHARED: 此模式仅支持并发读取,不支持并发写入。当不支持并发读取时,将报错。

DEFAULT: 对于指定的算法,此模式可以实现最大程度的并发性。如果支持并发读取和写入,则启用并发模式;否则强制使用独占模式。

NONE: 如果支持此模式,则可以同时进行读取和写入。否则,将报错。

EXCLUSIVE: 此模式强制执行独占访问。

示例

首先,执行以下命令以显示表中可用的索引。

mysql> SHOW INDEXES FROM student;

它将给出以下输出。

MySQL 删除索引

在输出中,我们可以看到有三个索引可用。现在,执行以下语句从表 student 中删除 class 索引。

mysql> DROP INDEX class ON student;

再次执行 SHOW INDEXES 语句以验证索引是否被删除。执行完此语句后,我们将得到以下输出结果,只有两个索引可用。

MySQL 删除索引

使用算法和锁的示例

以下语句使用算法和锁选项从 student 表中删除 age 索引。

mysql> DROP INDEX age ON student ALGORITHM = INPLACE LOCK = DEFAULT;

MySQL 删除主键索引

在某些情况下,数据表中包含一个主键索引,该索引在创建带有主键或唯一键的表时会自动创建。在这种情况下,我们需要执行以下命令,因为 “PRIMARY” 是一个保留字。

mysql> DROP INDEX PRIMARY ON table_name;

要从学生表中删除主键索引,请执行以下语句:

mysql> DROP INDEX PRIMARY ON student;

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程