📜  MySQL DROP INDEX语句

📅  最后修改于: 2020-11-17 02:35:43             🧑  作者: Mango

MySQL删除索引

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

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

如果要删除索引,它需要两件事:

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

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

算法选项

algorithm_option使我们能够指定用于删除表中索引的特定算法。 algorithm_option的语法如下:

Algorithm [=] {DEFAULT | INPLACE | COPY}

丢弃索引语法主要支持两种算法:INPLACE和COPY。

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

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

注意:如果未定义algorithm子句,则MySQL使用INPLACE算法。如果不支持INPLACE,则使用COPY算法。 DEFAULT算法的工作原理与在Drop Index语句中不使用任何算法子句的情况相同。

锁定选项

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

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

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

共享:此模式仅支持并发读取,不支持并发写入。当不支持并发读取时,将产生错误。

默认值:对于指定算法,此模式可以具有最大的并发级别。如果支持,它将启用并发读取和写入,否则将强制执行独占模式。

无:如果支持此模式,则可以同时进行读写。否则,将产生错误。

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

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

mysql> SHOW INDEXES FROM student;

它将给出以下输出。

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

mysql> DROP INDEX class ON student;

再次,执行SHOW INDEXES语句以验证是否删除了索引。执行此语句后,我们将获得以下输出,其中只有两个索引可用。

使用算法和锁定的示例

以下语句使用算法和锁定选项从学生表中删除年龄索引。

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

MySQL Drop主键索引

在某些情况下,该表包含一个PRIMARY索引,该索引在您创建具有主键或唯一键的表时创建。在这种情况下,因为PRIMARY是保留字,所以我们需要执行以下命令。

mysql> DROP INDEX PRIMARY ON table_name;

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

mysql> DROP INDEX PRIMARY ON student;