PostgreSQL ALTER Table:添加列、重命名列/表示例

ALTER TABLE 命令用于修改 PostgreSQL 表的结构。它是用于更改表列或表名称的命令。

语法

以下是 PostgreSQL ALTER TABLE 命令的语法

ALTER TABLE table-name action;

table-name 参数是要更改的表的名称。

action 参数是要执行的操作,例如更改列名、更改列的数据类型等。

描述

ALTER TABLE 命令更改现有表的定义。它采用以下子形式

  • ADD COLUMN:此命令的语法与 CREATE TABLE 命令类似,用于向表中添加新列。
  • DROP COLUMN:用于删除表列。施加在列上的约束和索引也将被删除。
  • SET/DROP DEFAULT:用于删除列的默认值。但是,此更改仅适用于后续的 INSERT 语句
  • SET/DROP NOT NULL:更改列是否允许 NULL 值。
  • SET STATISTICS:用于为 ANALYZE 操作的每一列设置统计信息收集目标。
  • SET STORAGE:用于设置列的存储模式。这将决定列保存在何处,是内联还是在辅助表中。
  • SET WITHOUT OIDS:用于删除表的旧列。
  • RENAME:用于更改表名或列名。
  • ADD table_constraint:用于向表中添加新约束,其语法与 CREATE TABLE 命令相同。
  • DROP CONSTRAINT:用于删除表约束。
  • OWNER:用于将表、序列、索引或视图的所有者更改为特定用户。
  • CLUSTER:用于标记一个表以供将来执行集群操作。

修改列

可以通过多种方式修改列。这些修改可以使用 ALTER TABLE 命令完成。让我们来讨论一下。

添加新列

要向 PostgreSQL 表添加新列,请使用带有以下语法的 ALTER TABLE 命令

ALTER TABLE table-name
  ADD new-column-name column-definition;

table-name 是要修改的表的名称。

new-column-name 是要添加的新列的名称。

column-definition 是新列的 数据类型

请看下面的 Book 表

Adding a New column in PostgreSQL

该表有两个列,id 和 name。我们需要向表中添加一个新列,并将其命名为 author。只需运行以下命令

ALTER TABLE Book
  ADD author VARCHAR(50);

运行上述命令后,Book 表现在如下所示

Adding a New column in PostgreSQL

新列已成功添加。

重命名表列

我们可以使用 ALTER TABLE 命令更改列名。在这种情况下,该命令的语法如下

ALTER TABLE table-name
  RENAME COLUMN old-name TO new-name;

table-name 是要重命名列的表的名称。

old-name 是列的旧/当前名称。

new-name 是列的新名称。请看下面的 Book 表

Book

Renaming a Table Column in PostgreSQL

我们需要将 author 列的名称更改为 book_author。这是命令

ALTER TABLE Book
  RENAME COLUMN author TO book_author;

运行命令后,我们可以查看表结构

Renaming a Table Column in PostgreSQL

列名已成功更改。

为列设置默认值

我们可以为列设置一个默认值,这样即使在 INSERT 操作期间不为该列指定值,也会使用默认值。在这种情况下,可以使用带有以下语法的 ALTER TABLE 命令

ALTER TABLE table-name ALTER COLUMN column-name [SET DEFAULT value];

table-name 是要修改其列的表的名称。

column-name 是要设置默认值的列的名称。

value 是该列的默认值。

请看下面的 Book 表

Setting a Default Value for a Column

我们需要为 book_author 列设置一个默认值。我们可以运行以下命令

ALTER TABLE Book ALTER COLUMN book_author SET DEFAULT 'Nicholas Samuel';		

现在,让我们向表中插入一行

INSERT INTO Book (id, name)
 VALUES (6, 'PostgreSQL for Beginners');

请注意,我们只为 id 和 name 这两列插入了值。但是,book_author 列使用了默认值。

Setting a Default Value for a Column

添加检查约束

检查约束有助于验证被插入到表中的记录。我们可以通过将 ALTER TABLE 命令与 ADD CHECK 语句结合使用来实现。语法

ALTER TABLE table-name ADD CHECK expression;

table-name 是要修改的表的名称。

expression 是要施加在表列上的约束。

让我们修改 Book 表的 book_author 列,使其只能接受 Nicholas 和 Samuel 的值。

ALTER TABLE Book ADD CHECK (book_author IN ('Nicholas', 'Samuel'));

现在,让我们尝试将 Nicholas 或 Samuel 以外的值插入到 Book 表的 book_author 列中。

INSERT INTO Book
VALUES(7, 'Best PostgreSQL Book', 'Gregory Bush');

该语句将返回以下错误

Adding a Check Constraint

由于违反了检查约束,插入操作失败。

重命名表

以下是用于重命名表的 ALTER TABLE 命令的语法

ALTER TABLE table-name
  RENAME TO new-table-name;

table-name 是表的当前名称。

new-table-name 是要分配给表的名称。

例如,让我们将 Book 表重命名为 Books。

ALTER TABLE Book
  RENAME TO Books;

使用 pgAdmin

现在让我们看看如何使用 pgAdmin 执行这些操作。

添加新列

要通过 pgAdmin 完成相同的操作,请执行此操作

步骤 1) 登录您的 pgAdmin 账户。

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

Adding a New column Using pgAdmin

步骤 3) 在查询编辑器中输入查询

ALTER TABLE Book
  ADD author VARCHAR(50);

步骤 4) 点击 Execute 按钮。

Adding a New column Using pgAdmin

步骤 5) 要检查列是否已添加,请执行以下操作

  1. 点击左侧导航栏中的 Databases。
  2. 展开 Demo。
  3. 展开 Schemas。
  4. 展开 Public。
  5. 展开 Tables。
  6. 展开 book。
  7. 展开 Columns。

Adding a New column Using pgAdmin

列应该已添加,如下图所示

Adding a New column Using pgAdmin

重命名表列

要通过 pgAdmin 完成相同的操作,请执行此操作

步骤 1) 登录您的 pgAdmin 账户。

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

Renaming a Table Column Using pgAdmin

步骤 3) 在查询编辑器中输入查询

ALTER TABLE Book
  RENAME COLUMN author TO book_author;

步骤 4) 点击 Execute 按钮。

Renaming a Table Column Using pgAdmin

步骤 5) 要检查更改是否成功,请执行以下操作

  1. 点击左侧导航栏中的 Databases。
  2. 展开 Demo。
  3. 展开 Schemas。
  4. 展开 Public。
  5. 展开 Tables。
  6. 展开 book。
  7. 展开 Columns。

Renaming a Table Column Using pgAdmin

列现在应该如下所示

Renaming a Table Column Using pgAdmin

列已成功更改。

为列设置默认值

要通过 pgAdmin 完成相同的操作,请执行此操作

步骤 1) 登录您的 pgAdmin 账户。

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

Setting a Default Value for a Column

步骤 3) 在查询编辑器中输入查询

ALTER TABLE Book ALTER COLUMN book_author SET DEFAULT 'Nicholas Samuel';		

步骤 4) 点击 Execute 按钮。

Setting a Default Value for a Column

步骤 5) 要测试,请在查询编辑器中运行以下命令

INSERT INTO Book (id, name)
 VALUES (6, 'PostgreSQL for Beginners')

步骤 6) 现在,我们可以查询表以检查 book_author 列中是否已插入默认值。

Setting a Default Value for a Column

添加检查约束

要通过 pgAdmin 完成相同的操作,请执行此操作

步骤 1) 登录您的 pgAdmin 账户。

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

Adding a Check Constraint Using pgAdmin

步骤 3) 在查询编辑器中输入查询

ALTER TABLE Book ADD CHECK (book_author IN ('Nicholas', 'Samuel'))

步骤 4) 点击 Execute 按钮。

Adding a Check Constraint Using pgAdmin

步骤 5) 要测试此功能,请执行以下操作

  1. 在查询编辑器中键入以下查询
    INSERT INTO Book
    VALUES(7, 'Best PostgreSQL Book', 'Gregory Bush');
    
  2. 点击 Execute 按钮。

    Adding a Check Constraint Using pgAdmin

    它将返回以下结果

Adding a Check Constraint Using pgAdmin

重命名表

要通过 pgAdmin 完成相同的操作,请执行此操作

步骤 1) 登录您的 pgAdmin 账户。

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

Renaming a Table Using pgAdmin

步骤 3) 在查询编辑器中输入查询

ALTER TABLE Book
  RENAME TO Books;

步骤 4) 点击 Execute 按钮。

Renaming a Table Using pgAdmin

步骤 5) 要检查表是否已重命名,请执行以下操作

  1. 点击左侧导航栏中的 Databases。
  2. 展开 Demo。
  3. 展开 Schemas。
  4. 展开 Public。
  5. 展开 Tables。

Renaming a Table Using pgAdmin

表已成功重命名。

摘要

  • ALTER TABLE 语句用于修改表的结构。
  • ALTER TABLE 命令根据您需要执行的任务而有不同的形式。
  • 结构可以是表的列,也可以是表本身。
  • 我们可以使用此语句更改表的名称。
  • ALTER TABLE 命令可用于设置列的默认值。
  • 该语句可用于验证输入到表列中的值。

下载本教程中使用的数据库