SQL 删除表格
SQL提供了一个命令,可以在数据库中完全删除现有的表。一旦执行了SQL DROP命令,就没有办法恢复表,包括表中的数据,因此在生产系统中执行此命令之前要小心。
SQL DROP表语句
SQL DROP TABLE 语句是一个数据定义语言(DDL)命令,用于删除表的定义、数据、索引、触发器、约束和权限规定(如果有的话)。
注意 −
- 使用此命令时要非常小心,因为一旦删除了表,该表中的所有信息也将永久丢失。
-
如果表是分区的,则该语句会删除表的定义、所有分区、存储在这些分区中的所有数据以及所有分区的定义。
-
要在数据库中删除表,必须对该表具有ALTER权限,并对表模式具有CONTROL权限。
-
尽管它是一个数据定义语言命令,但它与TRUNCATE TABLE语句不同,因为DROP语句完全释放表占用的内存。
-
DROP TABLE会导致隐式提交,除非使用TEMPORARY关键字。
语法
此DROP TABLE语句的基本语法如下−
DROP TABLE table_name;
示例
首先,让我们验证CUSTOMERS表,然后按照以下的方式从数据库中删除它。
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int(11) | NO | PRI | NULL | |
NAME | varchar(20) | NO | NULL | ||
AGE | int(11) | NO | NULL | ||
ADDRESS | char(25) | YES | NULL | ||
SALARY | decimal(18,2) | YES | NULL |
这意味着在数据库中存在CUSTOMERS表,因此我们现在将其删除,如下所示。
DROP TABLE CUSTOMERS;
输出
输出显示如下 –
Query OK, 0 rows affected (0.001 sec)
验证
现在,要验证表是否真的已被删除,您可以使用”DESC CUSTOMERS”命令如下所示-
DESC CUSTOMERS;
显示以下错误−
ERROR 1146 (42S02): Table 'testDB.CUSTOMERS' doesn't exist
当使用SQL DROP命令删除MySQL表时,特定为该表授予的权限不会自动删除。它们必须手动删除。
如果存在,则使用IF EXISTS子句
在删除表之前总是检查数据库中是否存在该表的情况下,您可以在DROP TABLE语句中使用IF EXISTS子句。
当在DROP TABLE查询中指定此子句时,它将自动检查当前数据库中是否存在该表,如果存在则删除。如果数据库中不存在该表,则会忽略这个查询。
语法
以下是DROP TABLE IF EXISTS的基本语法 –
DROP TABLE [IF EXISTS] table_name;
示例
如果您尝试在数据库中删除一个不存在的表,而不使用IF EXISTS子句,如下所示 –
DROP TABLE CUSTOMERS;
将生成错误−
ERROR 1051 (42S02): Unknown table 'testDB.CUSTOMERS'
如果您在DROP TABLE语句中使用 IF EXISTS 子句,如下所示,指定的表将被删除,如果给定名称的表不存在,则查询将被忽略。
但是,如果您尝试使用IF EXISTS子句删除数据库中不存在的表,如下所示-
DROP TABLE IF EXISTS CUSTOMERS;
查询将被忽略,并显示以下输出 –
Query OK, 0 rows affected, 1 warning (0.001 sec)
删除临时表
您可以在DROP TABLE语句中使用 TEMPORARY 关键字,只删除临时表。包含TEMPORARY关键字是防止意外删除非临时表的好方法。
语法
DROP TEMPORARY TABLE TEMP_TABLE;
示例
以下是删除临时表CUSTOMERS的示例。
DROP TEMPORARY TABLE CUSTOMERS;