📅  最后修改于: 2020-11-17 02:35:43             🧑  作者: Mango
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;
在某些情况下,该表包含一个PRIMARY索引,该索引在您创建具有主键或唯一键的表时创建。在这种情况下,因为PRIMARY是保留字,所以我们需要执行以下命令。
mysql> DROP INDEX PRIMARY ON table_name;
要从student表中删除主键索引,请执行以下语句:
mysql> DROP INDEX PRIMARY ON student;