Sql 简明教程

SQL - DROP Table

SQL 为数据库提供了完全删除现有表的命令。一旦发布 SQL DROP 命令,就无法找回该表,包括其中的数据,因此在生产系统中发布此命令前要谨慎。

The SQL DROP Table Statement

SQL DROP TABLE 语句是个数据定义语言 (DDL) 命令,用于移除表的定义及其数据、索引、触发器、约束和权限规范(如果有)。

Note

  1. 使用此命令时应非常小心,因为在删除表后,此表中可用的所有信息也将永久丢失。

  2. 如果表被分区,此语句将移除表定义、其所有分区、存储在这些分区中的所有数据以及所有分区定义。

  3. 要删除数据库中的表,必须对所述表具有 ALTER 权限,以及对表架构具有 CONTROL 权限。

  4. 即使它是个数据定义语言命令,它也与 TRUNCATE TABLE 语句不同,因为 DROP 语句会完全从内存中释放表。

  5. DROP TABLE 会导致一个隐式提交,除非与 TEMPORARY 关键字一起使用。

Syntax

此 DROP TABLE 语句的基本语法如下 −

DROP TABLE table_name;

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;

Output

输出显示如下 −

Query OK, 0 rows affected (0.001 sec)

Verification

现在,要验证表是否确实被删除,可以使用 DESC CUSTOMERS 命令,如下所示 −

DESC CUSTOMERS;

显示了以下错误 −

ERROR 1146 (42S02): Table 'tutorials.CUSTOMERS' doesn't exist

The IF EXISTS Clause

在删除表之前,不必总是检查它是否存在于数据库中,而可以使用 DROP TABLE 语句中的 IF EXISTS 子句。

当在 DROP TABLE 查询中指定此子句时,它将自动检查指定的表是否在当前数据库中存在,然后在存在的情况下删除它。如果表不存在于数据库中,则将忽略该查询。

Syntax

以下是 DROP TABLE IF EXISTS 的基本语法 −

DROP TABLE [IF EXISTS] table_name;

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)

DROP - TEMPORARY TABLE

您可以将 TEMPORARY 关键字与 DROP TABLE 语句一起包含在内,它只删除 TEMPORARY 表。包括 TEMPORARY 关键字是防止意外删除非 TEMPORARY 表的有效方法。

Syntax

DROP TEMPORARY TABLE TEMP_TABLE;

Example

以下是一删除临时表 CUSTOMERS 的示例。

DROP TEMPORARY TABLE CUSTOMERS;