MySQL 删除索引

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

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

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

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

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

算法选项

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

Algorithm [=] {DEFAULT | INPLACE | COPY}  

Drop Index 语法主要支持两种算法,即 INPLACE 和 COPY。

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

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

注意:如果你没有定义算法子句,MySQL 使用 INPLACE 算法。如果不支持 INPLACE,则使用 COPY 算法。DEFAULT 算法的工作原理与不使用任何带有 Drop index 语句的算法子句相同。

锁定选项

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

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

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

SHARED:此模式仅支持并发读取,不支持并发写入。当不支持并发读取时,它会给出错误。

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

NONE:如果支持此模式,则您有并发读写。否则,它会给出错误。

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 删除主键索引

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

mysql> DROP INDEX PRIMARY ON table_name;  

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

mysql> DROP INDEX PRIMARY ON student;  

 

热门文章

优秀文章