📜  PostgreSQL Drop列

📅  最后修改于: 2020-11-30 01:21:18             🧑  作者: Mango

PostgreSQL Drop列

在本节中,我们将讨论如何在ALTER TABLE命令的帮助下删除列。

PostgreSQL DROP COLUMN命令

我们将在ALTER TABLE命令中使用DROP COLUMN条件删除表的列:

ALTER TABLE table_name 
DROP COLUMN column_name;

PostgreSQL将自动删除其所有约束和索引,包括从表中删除列时的列,并且每个放置列的条件都以逗号(,)分隔。

我们不能删除其他对象所依赖的列,也不能在触发器,视图,存储过程等其他数据库对象中使用这些列。

因此,要删除这些列及其所有连接的对象,我们将在drop column命令中使用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命令的工作。

因此,我们将创建三个不同的表,例如Product,Categories和Brand

在上图中,每个产品仅包含一个品牌,每个品牌可以具有多个产品。每个产品都分配有一个类别,每个类别可以具有各种产品。

以下命令用于创建三个表(类别,产品和品牌)

使用以下命令创建类别表:

CREATE TABLE Categories (
    Cate_id serial PRIMARY KEY,
    Cate_name VARCHAR NOT NULL
);

输出量

执行完上述命令后,我们将得到以下消息;分类表已创建。

使用以下语句创建产品表:

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)
    );

输出量

执行完上述命令后,我们将得到以下消息;产品表已创建。

使用以下命令创建品牌表:

CREATE TABLE Brand (
    Brand_id serial PRIMARY KEY,
    Brand_name VARCHAR NOT NULL
);

输出量

执行完上述命令后,我们将得到以下消息;品牌表已创建。

此外,我们基于“产品”和“品牌”表创建一个视图,如下所示:

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视图已创建。

如果要删除“产品”的cate_id列,将使用以下命令:

ALTER TABLE Product DROP COLUMN cate_id;

输出量

执行完上述命令后,我们将得到以下消息;从产品表中删除的cate_id列。

如果要查看psql中的表,我们将使用以下命令

Javatpoint=# \d Product;

正如我们在上面的屏幕截图中看到的那样,以上命令删除了Cate_id列,并将Cate_id列包括在外键约束中。

现在,我们将尝试从“产品”表中删除Brand_id列。

ALTER TABLE Product DROP COLUMN Brand_id;

一旦执行上述命令,PostgreSQL将引发以下错误:

它指出product_info视图正在使用Product表的Brand_id列。

因此,我们将使用层叠选项在以下命令的帮助下删除Brand_id列和Product_info视图:

ALTER TABLE Product DROP COLUMN Brand_id CASCADE;

一旦执行了以上命令,它将发出以下通知并删除特定的列。

在这里,我们将在单个命令中同时删除list_price和Model_year列,我们需要使用多个DROP COLUMN条件,如下所示:

ALTER TABLE Product 
DROP COLUMN List_Price,
DROP COLUMN Model_year;

输出量

执行完上述命令后,我们将获得以下消息窗口: List_price和Model_year列已从Product表中删除。

如果我们想查看以上操作是否正常,我们将使用Select命令:

Select * from Product ;             

输出量

执行完以上命令后,我们将得到以下输出: