Sql 简明教程
SQL - DROP Table
SQL 为数据库提供了完全删除现有表的命令。一旦发布 SQL DROP 命令,就无法找回该表,包括其中的数据,因此在生产系统中发布此命令前要谨慎。
The SQL DROP Table Statement
SQL DROP TABLE 语句是个数据定义语言 (DDL) 命令,用于移除表的定义及其数据、索引、触发器、约束和权限规范(如果有)。
Note −
-
使用此命令时应非常小心,因为在删除表后,此表中可用的所有信息也将永久丢失。
-
如果表被分区,此语句将移除表定义、其所有分区、存储在这些分区中的所有数据以及所有分区定义。
-
要删除数据库中的表,必须对所述表具有 ALTER 权限,以及对表架构具有 CONTROL 权限。
-
即使它是个数据定义语言命令,它也与 TRUNCATE TABLE 语句不同,因为 DROP 语句会完全从内存中释放表。
-
DROP TABLE 会导致一个隐式提交,除非与 TEMPORARY 关键字一起使用。
Example
假设我们使用 CREATE TABLE 语句创建了一个名为 CUSTOMERS 的表,如下所示 −
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25),
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
让我们使用 DESC 命令首先验证 CUSTOMERS 表,然后会从数据库中删除它 −
DESC Table
如果表创建成功,DESC 命令会显示表的结构,如下所示 −
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;
The IF EXISTS Clause
在删除表之前,不必总是检查它是否存在于数据库中,而可以使用 DROP TABLE 语句中的 IF EXISTS 子句。
当在 DROP TABLE 查询中指定此子句时,它将自动检查指定的表是否在当前数据库中存在,然后在存在的情况下删除它。如果表不存在于数据库中,则将忽略该查询。
Example
如果您尝试删除数据库中不存在的表(不使用 IF EXISTS 子句),如下所示 −
DROP TABLE CUSTOMERS;
将生成一个错误:
ERROR 1051 (42S02): Unknown table 'tutorials.CUSTOMERS'
如果您与 DROP TABLE 语句一起使用 IF EXISTS 子句,如下所示,则会删除指定的表,如果具有给定名称的表不存在,则将忽略该查询。
但是,如果您尝试使用 IF EXISTS 子句删除数据库中不存在的表,如下所示 −
DROP TABLE IF EXISTS CUSTOMERS;
该查询将被忽略,并显示以下输出:
Query OK, 0 rows affected, 1 warning (0.001 sec)