PostgreSQL 删除表字段

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

PostgreSQL DROP COLUMN 命令

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

ALTER TABLE table_name   
DROP COLUMN column_name;  

数据库从表中删除列时会自动删除其所有约束和索引,包括该列,并且每个删除列条件都以逗号 (,)分隔。我们不能删除其他对象依赖于它们的列,也不能删除其他数据库对象(如触发器、视图、存储过程等)中使用的列。

因此,为了删除这些列及其所有连接的对象,我们将在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。

在上图中,每个Product只包含一个brand,每个 brand 可以有多个产品。每个产品都分配到一个类别,每个类别可以有各种产品。

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

借助以下命令创建类别表:

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

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

使用以下语句创建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表已创建。

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

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

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

此外,我们基于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视图已创建。

如果要删除Product表的cate_id列,我们将使用以下命令:

ALTER TABLE Product DROP COLUMN cate_id;  

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

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

Javatpoint=# \d Product;  

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

现在我们将尝试从Product表中删除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 ;              

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

热门文章

优秀文章