PostgreSQL 删除表格 (DROP TABLE)
                           
天天向上
发布: 2025-03-11 23:22:17

原创
341 人浏览过

在 PostgreSQL 中,可以使用 DROP TABLE 语句来删除(移除)一个或多个表。如果一个表不再需要,或者想要清理数据库结构,可以使用该语句。


1. DROP TABLE 语法

DROP TABLE table_name;
  • table_name:要删除的表名。

示例:

DROP TABLE employees;

这将删除 employees 表及其所有数据。


2. 防止错误的 DROP TABLE IF EXISTS

如果表不存在,直接 DROP TABLE 会导致错误。可以使用 IF EXISTS 选项,防止错误发生:

DROP TABLE IF EXISTS employees;

这样,如果 employees 表不存在,PostgreSQL 也不会报错。


3. 删除多个表

可以一次删除多个表:

DROP TABLE employees, departments;

这样会同时删除 employeesdepartments 两个表。


4. CASCADE 选项(级联删除)

如果表与其他表有外键关联,默认情况下不能直接删除,必须使用 CASCADE

DROP TABLE employees CASCADE;
  • CASCADE 选项会删除 employees 表,并删除所有依赖于它的对象(如外键关联的表)。

示例:

CREATE TABLE departments (
    dept_id SERIAL PRIMARY KEY,
    dept_name VARCHAR(100) NOT NULL
);

CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    dept_id INT REFERENCES departments(dept_id) ON DELETE CASCADE
);

如果尝试:

DROP TABLE departments;

会报错:

ERROR: cannot drop table "departments" because other objects depend on it
DETAIL: Table "employees" references "departments".

正确的方式是:

DROP TABLE departments CASCADE;

这样 employees 也会被删除。


5. RESTRICT 选项(默认行为)

如果不希望自动删除依赖对象,可以显式使用 RESTRICT

DROP TABLE employees RESTRICT;
  • RESTRICT 选项会阻止删除表,若其他表依赖它,PostgreSQL 会报错。
  • 这也是 DROP TABLE 默认行为。

6. 删除表但保留数据结构

有时想要删除表中所有数据,但保留表结构,可以使用 TRUNCATE

TRUNCATE TABLE employees;

或者:

TRUNCATE TABLE employees RESTART IDENTITY;
  • RESTART IDENTITY 选项会重置 SERIAL 生成的自增 ID。

7. DROP TABLE 之后如何恢复?

DROP TABLE 直接删除表,无法撤销。但可以使用 事务回滚(如果在事务中执行):

BEGIN;
DROP TABLE employees;
ROLLBACK;  -- 撤销删除

如果事务未提交,则可以恢复,否则数据将永久丢失。


8. 总结

语法作用
DROP TABLE table_name;删除表
DROP TABLE IF EXISTS table_name;仅在表存在时删除,防止错误
DROP TABLE table1, table2;删除多个表
DROP TABLE table_name CASCADE;级联删除所有相关对象
DROP TABLE table_name RESTRICT;若存在依赖对象,则阻止删除(默认行为)
TRUNCATE TABLE table_name;清空表但保留结构

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *