Sql 简明教程
SQL - Drop Index
SQL 中的 DROP 语句用于删除或删除现有的数据库对象,例如表、索引、视图或过程。每当我们在任何数据库对象中使用 DROP 语句时,它将连同它们的相关数据一起永久删除它们。
而当该数据库对象为索引时,将使用 SQL 中的 DROP INDEX 语句。
Dropping an SQL Index
可以使用 DROP INDEX 语句从数据库表中删除 SQL 索引。
Note - 我们无法删除由 PRIMARY KEY 或 UNIQUE 约束创建的索引。为了删除它们,您需要使用 ALTER TABLE 语句完全删除约束。
Syntax
以下是 SQL 中 DROP INDEX 命令的语法:
DROP INDEX index_name ON table_name;
在此,
-
index_name 是要删除的索引名称。
-
table_name 是索引关联的表名称。
Example
在此示例中,我们将了解如何删除名为 CUSTOMERS 的表上的索引,可以使用以下查询创建该索引:
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR(15) NOT NULL,
AGE INT NOT NULL,
ADDRESS VARCHAR(25),
SALARY DECIMAL(10, 4),
PRIMARY KEY(ID));
);
现在,使用以下查询将一些值插入到上述创建的表中:
INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', '32', 'Ahmedabad', 2000),
(2, 'Khilan', '25', 'Delhi', 1500),
(3, 'Kaushik', '23', 'Kota', 2000),
(4, 'Chaitali', '25', 'Mumbai', 6500),
(5, 'Hardik','27', 'Bhopal', 8500),
(6, 'Komal', '22', 'Hyderabad', 9000),
(7, 'Muffy', '24', 'Indore', 5500);
在创建表后,使用以下查询在 CUSTOMERS 表中的列 NAME 上创建索引:
CREATE INDEX INDEX_NAME on CUSTOMERS(NAME);
现在,使用以下 SHOW INDEX 查询验证 CUSTOMERS 表上是否创建了索引:
SHOW INDEX FROM CUSTOMERS;
在执行上述查询时,索引列表显示如下:
Table |
Non_unique |
Key_name |
Seq_in_index |
Column_name |
customers |
0 |
PRIMARY |
1 |
ID |
customers |
1 |
index_name |
1 |
NAME |
然后,使用以下 DROP INDEX 语句删除 CUSTOMERS 表中的相同索引 INDEX_NAME:
DROP INDEX INDEX_NAME ON CUSTOMERS;
DROP INDEX with IF EXISTS
SQL 中的 DROP INDEX IF EXISTS 语句仅在表中存在索引时才用于删除索引。当你要删除索引但又不确定索引是否存在时,此语句特别有用。MySQL not 支持此子句。
IF EXISTS 子句确保此语句仅在索引存在时才删除索引。如果索引不存在,它只终止执行。
Syntax
以下是 SQL 中 DROP INDEX IF EXISTS 的语法:
DROP INDEX IF EXISTS index_name
ON table_name;
在此,
-
index_name 是要删除的索引名称。
-
table_name 是索引关联的表名称。
Example
在此示例中,让我们尝试删除 SQL Server 数据库中的索引。
让我们考虑之前创建的表 CUSTOMERS,并使用以下查询为表中的 NAME 列创建索引:
CREATE INDEX INDEX_NAME on CUSTOMERS(NAME);
然后,让我们使用以下查询删除它:
DROP INDEX IF EXISTS INDEX_NAME ON CUSTOMERS;
Verification
让我们使用以下查询验证 NAME 的索引是否已删除:
EXEC sys.sp_helpindex @objname = N'CUSTOMERS';
正如您所观察到的,NAME 列已从索引列表中删除。
index_name |
index_description |
index_keys |
PK_CUSTOMER_3214EC27CB063BB7 |
clustered, unique, primary key locatedPRIMARY on PRIMARY |
ID |
Removing indexes created by PRIMARY KEY or UNIQUE
DROP INDEX 语句不会删除由 PRIMARY KEY 或 UNIQUE 约束创建的索引。要删除与它们关联的索引,我们需要完全删除这些约束。这是通过 ALTER TABLE… DROP CONSTRAINT 语句完成的。
Syntax
以下是在 SQL 中 ALTER TABLE… DROP CONSTRAINT 语句的语法:
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
在此,
-
table_name 是包含 PRIMARY KEY 约束的表的名称。
-
constraint_name 是您要删除的 PRIMARY KEY 约束的名称。
Example
假设先前创建的表(CUSTOMERS)并让我们首先使用以下查询列出在表上创建的所有索引:
EXEC sys.sp_helpindex @objname = N'CUSTOMERS';
列表显示如下:
index_name |
index_description |
index_keys |
PK_CUSTOMER_3214EC27CB063BB7 |
nonclustered located on PRIMARYID |
ID |
这里, PK_CUSTOMER_3214EC27CB063BB7 是创建在 CUSTOMERS 表的 ID 列上的 PRIMARY KEY 约束的名称。
现在,让我们删除由 PRIMARY KEY 约束创建的索引。
ALTER TABLE customers
DROP CONSTRAINT PK__CUSTOMER__3214EC27CB063BB7;