摘要:在本教程中,您将学习如何使用 MySQL DROP INDEX
语句删除表的现有索引。
MySQL DROP INDEX
语句语法
要从表中删除现有索引,请使用DROP INDEX
语句,如下所示:
DROP INDEX index_name ON table_name
[algorithm_option | lock_option];
Code language: SQL (Structured Query Language) (sql)
在这个语法中:
- 首先,在
DROP INDEX
关键字后指定要删除的索引的名称。 - 其次,指定索引所属的表的名称。
算法
algorithm_option
允许您指定用于索引删除的特定算法。下面显示了algorithm_option
子句的语法:
ALGORITHM [=] {DEFAULT|INPLACE|COPY}
Code language: SQL (Structured Query Language) (sql)
对于索引删除,支持以下算法:
COPY
:将表逐行复制到新表,然后对原始表的副本执行DROP INDEX
。不允许并发数据操作语句,例如INSERT
和UPDATE
。-
INPLACE
:表在适当的位置重建,而不是复制到新表。 MySQL 在索引删除操作的准备和执行阶段对表发出独占元数据锁。该算法允许并发数据操作语句。
请注意, ALGORITHM
子句是可选的。如果跳过它,MySQL 将使用INPLACE
。如果不支持INPLACE
,MySQL 将使用COPY
。
使用DEFAULT
与省略ALGORITHM
子句具有相同的效果。
锁
lock_option
控制删除索引时表上并发读取和写入的级别。
下面显示了lock_option
的语法:
LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
Code language: SQL (Structured Query Language) (sql)
支持以下锁定模式:
DEFAULT
:这允许您拥有给定算法的最大并发级别。首先,如果支持的话,它允许并发读取和写入。如果不支持,则允许并发读取。如果没有,则强制执行独占访问。-
NONE
:如果支持NONE
,则可以并发读取和写入。否则,MySQL 会发出错误。 -
SHARED
:如果支持SHARED
,则可以并发读取,但不能并发写入。如果不支持并发读取,MySQL 会发出错误。 -
EXCLUSIVE
:这强制执行独占访问。
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)
);
Code language: SQL (Structured Query Language) (sql)
以下语句从leads
表中删除name
索引:
DROP INDEX name ON leads;
Code language: SQL (Structured Query Language) (sql)
以下语句使用特定算法和锁从leads
表中删除email
索引:
DROP INDEX email ON leads
ALGORITHM = INPLACE
LOCK = DEFAULT;
Code language: SQL (Structured Query Language) (sql)
MySQL DROP PRIMARY KEY
索引
要删除索引名称为PRIMARY
主键,请使用以下语句:
DROP INDEX `PRIMARY` ON table_name;
Code language: SQL (Structured Query Language) (sql)
以下语句创建一个名为t
并带有主键的新表:
CREATE TABLE t(
pk INT PRIMARY KEY,
c VARCHAR(10)
);
Code language: SQL (Structured Query Language) (sql)
要删除主键索引,请使用以下语句:
DROP INDEX `PRIMARY` ON t;
Code language: SQL (Structured Query Language) (sql)
在本教程中,您学习了如何使用 MySQL DROP INDEX
语句删除表的现有索引。
本教程有帮助吗?