PostgreSQL教程

PostgreSQL 删除列

在本节中,我们将讨论如何使用 ALTER TABLE 删除列 命令。

PostgreSQL DROP COLUMN命令

我们将在 ALTER TABLE命令用于删除表的列:
ALTER TABLE table_name 
DROP COLUMN column_name;
PostgreSQL 会自动删除其所有约束和索引,包括从表中删除列时的列,并且每个放置列的条件都用 逗号(,)分隔。
我们不能删除那些其他对象依赖它们并且也用在其他数据库对象中的列,例如 触发器,视图,存储过程等。
因此,要删除这些列及其所有连接的对象,我们将使用 CASCADE 选项>删除列命令,如下所示:
ALTER TABLE table_name 
DROP COLUMN column_name CASCADE;
如果我们想删除一个不存在的列,PostgreSQL将引发一个问题。我们将在drop column命令中添加IF EXISTS条件,以克服此错误,如下面的命令所示:
ALTER TABLE table_name 
DROP COLUMN if EXISTS column_name;
在上面的命令中,如果我们删除不存在的列,则PostgreSQL将发出通知而不是错误。
如果需要删除各种列,我们将使用以下命令单个命令中的表的列:
ALTER TABLE table_name
DROP COLUMN column_name_1,
DROP COLUMN column_name_2;

PostgreSQL DROP COLUMN命令示例

让我们看一些示例来了解 ALTER TABLE DROP COLUMN 命令的工作。
因此,我们将创建三个不同的表,例如 产品,类别和品牌
PostgreSQL Drop column
在上图中,每个 产品仅包含一个 品牌,并且每个品牌可以具有多个产品。每个产品都分配到一个 类别,并且每个类别可以具有各种产品。
以下命令用于创建三个表 (类别,产品和品牌) ):
借助以下命令创建 Categories 表:
CREATE TABLE Categories (
    Cate_id serial PRIMARY KEY,
    Cate_name VARCHAR NOT null
);
输出
执行上述命令后,我们将得到以下消息; Categories 表已创建。
PostgreSQL放置column
使用以下语句创建 Product 表:
CREATE TABLE Product (
    Pro_id serial PRIMARY KEY,
    Pro_name VARCHAR NOT null,
    Brand_id int NOT null,
    Cate_id int NOT null,
    List_price DECIMAL NOT null,
    Model_year SMALLint NOT null,
    FOREIGN KEY (Cate_id) REFERENCES Categories (Cate_id),
    FOREIGN KEY (Brand_id) REFERENCES Brand (Brand_id)
    );
输出
执行上述命令后,我们将得到以下消息; Product 表已创建。
PostgreSQL放置column
使用以下命令创建 Brand 表:
CREATE TABLE Brand (
    Brand_id serial PRIMARY KEY,
    Brand_name VARCHAR NOT null
);
输出
执行上述命令后,我们将得到以下消息; Brand 表已创建。
PostgreSQL放置column
此外,我们基于 Product Brand 表创建视图,如下所示:
CREATE VIEW Product_info AS SELECT
 Pro_id,
 Pro_name,
 Brand_name
FROM
Product p
INNER JOIN Brand B ON B .Brand_id = p.Brand_id
ORDER BY
Pro_name;
输出
执行上述命令后,我们将得到以下消息; Product_info 视图已创建。
PostgreSQL放置column
如果要删除 Product 表的 cate_id 列,我们将使用以下命令:
ALTER TABLE Product DROP COLUMN cate_id;
输出
执行上述命令后,将得到以下消息; cate_id 列从 Product 表中删除。
PostgreSQL放置列
如果要查看psql中的表,将使用以下命令
lidihuo=# \d Product;

PostgreSQL放置列
如我们在上述屏幕截图中所见,上述命令删除了 Cate_id列,并将 Cate_id 列包含在外键约束中。
现在,我们将尝试从以下位置删除 Brand_id 产品 表。
ALTER TABLE Product DROP COLUMN Brand_id;
一旦执行上述命令,PostgreSQL将引发以下错误:
PostgreSQL放置列
它表示 product_info 视图正在使用 Product 表的 Brand_id 列。
因此,我们将使用 cascade 选项在以下命令的帮助下删除 Brand_id 列和 Product_info 视图:
ALTER TABLE Product DROP COLUMN Brand_id CASCADE;
一旦执行了上述命令,它将发出以下 通知并删除特定的列。
PostgreSQL删除列
在这里,我们将在单个命令中同时删除 list_price和Model_year 列,我们需要使用 多个DROP COLUMN 条件,如下所示:
ALTER TABLE Product 
DROP COLUMN List_Price,
DROP COLUMN Model_year;
输出
执行上述命令后,我们将获得以下消息窗口: List_price和Model_year列已从 产品 表。
PostgreSQL放置列
如果我们希望以上操作正常进行,请使用 Select 命令:
Select * from Product ;
输出
执行上述命令后,我们将获得以下输出:
PostgreSQL Drop column
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4