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;
热门文章
优秀文章