DROP TABLE [语句]/develop/sql-statements/overview/) 从数据库中删除一个表,包括表的数据与索引。

所需权限

用户必须对要删除的表拥有DROP 权限 。如果使用了CASCADE,用户必须拥有删除每个依赖对象的权限。

概要

图片

参数

Parameter Description
IF EXISTS 如果要删除的表存在,删除该表,如果不存在,不会返回错误
table_name 逗号隔开的一系列表名. 通过 SHOW TABLES语句,可以知道要删除表的表名
CASCADE 删除依赖这个表的所有对象 (例如 constraints and views) .

CASCADE不会列出删除的对象,所以要谨慎使用。
RESTRICT (Default) 如果有一个表有对象依赖(例如 constraints and views),那么将不会删除该表

例子

删除一个表(无依赖对象)

在这个例子中,没有其他对象依赖这个表。

> SHOW TABLES FROM bank;
+--------------------+
|       Table        |
+--------------------+
| accounts           |
| branches           |
| user_accounts_view |
+--------------------+
(3 rows)
> DROP TABLE bank.branches;
DROP TABLE
> SHOW TABLES FROM bank;
+--------------------+
|       Table        |
+--------------------+
| accounts           |
| user_accounts_view |
+--------------------+
(2 rows)

使用CASCADE删除依赖对象的表

在这个例子中,一个视图依赖于要删除的表。所以,只有使用CASCADE,才能删除这个表,同时,还会删除这个视图。

Warning CASCADE 会删除 所有依赖这个表的对象,并且不会列出删除的对象,所以,可能会出现难以恢复的损失。为了避免出现上述情况,我们建议单独删除对象

> SHOW TABLES FROM bank;
+--------------------+
|       Table        |
+--------------------+
| accounts           |
| user_accounts_view |
+--------------------+
(2 rows)
> DROP TABLE bank.accounts;
pq: cannot drop table "accounts" because view "user_accounts_view" depends on it
> DROP TABLE bank.accounts CASCADE;
DROP TABLE
> SHOW TABLES FROM bank;
+-------+
| Table |
+-------+
+-------+
(0 rows)

See Also