MySQL 删除索引
简介:在本教程中,您将学习如何使用MySQL DROP INDEX语句删除表的现有索引。
MySQL DROP INDEX语句语法
要从表中删除现有索引,请使用DROP INDEX语句,如下所示:
DROP INDEX index_name ON table_name [algorithm_option | lock_option];
使用以下语法:
首先,在DROP INDEX关键字之后指定要删除的索引的名称。
其次,指定索引所属的表的名称。
算法
algorithm_option允许您指定用于删除索引的特定算法。
下面显示了algorithm_option子句的语法:
ALGORITHM [=] {DEFAULT|INPLACE|COPY}
为了删除索引,支持以下算法:
COPY:将表逐行复制到新表中,然后对原始表的副本执行DROP INDEX。
不允许并发数据操作语句,例如INSERT和UPDATE。INPLACE:将该表重建到位,而不是复制到新表中。
MySQL在索引删除操作的准备和执行阶段对表发出独占元数据锁。
该算法允许并发数据操作语句。
注意,ALGORITHM子句是可选的。
如果您跳过它,MySQL将使用INPLACE。
如果INPLACE是不支持的,则MySQL使用COPY。
使用DEFAULT与省略ALGORITHM子句具有相同的效果。
锁
在删除索引时,lock_option控制表上并发读取和写入的级别。
下面显示了lock_option的语法:
LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
支持以下锁定模式:
默认值:这使您可以为给定算法获得最大的并发级别。
首先,如果支持,它允许并发读写。
如果不支持,则允许并发读取(如果支持)。
如果不是,请强制执行独占访问。NONE:如果支持NONE,则可以同时进行读写操作。
否则,MySQL发出错误。共享:如果支持共享,则可以同时读取,但不能同时写入。
如果并发读取不支持,MySQL会发出错误。独占:这将强制执行独占访问。
MySQL DROP INDEX语句示例
让我们为演示创建一个新表:
CREATE TABLE leads( lead_id INT AUTO_INCREMENT, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, email VARCHAR(255) NOT NULL, information_source VARCHAR(255), INDEX name(first_name,last_name), UNIQUE email(email), PRIMARY KEY(lead_id) );
以下语句从Leads表中删除名称索引:
DROP INDEX name ON leads;
以下语句使用特定算法和锁定从潜在顾客表中删除电子邮件索引:
DROP INDEX email ON leads ALGORITHM = INPLACE LOCK = DEFAULT;
MySQL DROP PRIMARY KEY索引
要删除索引名称为PRIMARY的主键,请使用以下语句:
DROP INDEX `PRIMARY` ON table_name;
以下语句使用主键创建一个名为t的新表:
CREATE TABLE t( pk INT PRIMARY KEY, c VARCHAR(10) );
要删除主键索引,请使用以下语句:
DROP INDEX `PRIMARY` ON t;
在本教程中,您学习了如何使用MySQL DROP INDEX语句删除表的现有索引。