PostgreSQL ALTER 表:添加列、重命名列/表示例
ALTER TABLE 命令用于改变 PostgreSQL 表。它是用于更改表列或表名称的命令。
句法
以下是 PostgreSQL ALTER TABLE 命令:
ALTER TABLE table-name action;
table-name参数是需要更改的表的名称。
action参数是您需要执行的操作,例如更改列的名称,更改列的数据类型等。
描述
ALTER TABLE 命令可更改现有表的定义。它采用以下子形式:
- 添加列:这使用与 CREATE TABLE 命令类似的语法向表中添加新列。
- 删除列:用于删除表列。列上施加的约束和索引也将被删除。
- 设置/删除默认值:用于删除列的默认值。但是,更改仅适用于后续 INSERT 语句.
- 设置/删除非空:更改列是否允许空值。
- 设置统计数据: 用于设置 ANALYZE 操作的每一列的统计收集目标。
- 设置存储:用于设置列的存储模式。这将决定列的保存位置,是内联的还是补充表中的。
- 不含 OID 的设置:用于删除表的旧列。
- 改名:用于更改表名或列名。
- 添加表约束:用于向表添加新约束它使用与以下语法相同的语法 创建表 命令。
- 下降约束:用于删除表约束。
- 业主:用于将表、序列、索引或视图的所有者更改为特定用户。
- 田字形:用于标记将来执行集群操作时要使用的表。
修改列
可以通过多种方式修改列。可以使用 ALTER TABLE 命令进行此类修改。让我们讨论一下这些:
添加新列
要将新列添加到 PostgreSQL 表,ALTER TABLE 命令使用以下语法:
ALTER TABLE table-name ADD new-column-name column-definition;
table-name 是要修改的表的名称。
new-column-name 是要添加的新列的名称。
列定义是 数据类型 新专栏的。
请参阅下面显示的 Book 表:
该表有两列,id 和 name。我们需要向表中添加一个新列并将其命名为 author。只需运行以下命令:
ALTER TABLE Book ADD author VARCHAR(50);
运行上述命令后,Book表现在如下所示:
新列已成功添加。
重命名表列
我们可以使用 ALTER TABLE 命令来更改列的名称。在这种情况下,该命令的语法如下:
ALTER TABLE table-name RENAME COLUMN old-name TO new-name;
table-name 是要重命名其列的表的名称。
旧名称是该列的旧名称/当前名称。
new-name 是列的新名称。考虑下面显示的表 Book:
书:
我们需要将 author 列的名称添加到 book_author。命令如下:
ALTER TABLE Book RENAME COLUMN author TO book_author;
运行命令之后我们可以查看表的结构:
列名已成功更改。
设置列的默认值
我们可以为列设置默认值,这样即使在 INSERT 操作期间没有为该列指定值,也会使用默认值。在这种情况下,可以使用以下语法使用 ALTER TABLE 命令:
ALTER TABLE table-name ALTER COLUMN column-name [SET DEFAULT value];
table-name 是要修改其列的表的名称。
column-name 是要设置默认值的名称。
该值是该列的默认值。
考虑下面给出的 Book 表:
我们需要为 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 列已使用默认值:
添加检查约束
检查约束有助于验证插入表中的记录。我们可以通过将 ALTER TABLE 命令与 ADD CHECK 语句结合起来来实现这一点。语法:
ALTER TABLE table-name ADD CHECK expression;
table-name 是要改变的表的名称。
该表达式是对表列施加的约束。
让我们修改 Book 表的 book_author 列,以便它只接受值 Nicholas 和 Samuel:
ALTER TABLE Book ADD CHECK (book_author IN ('Nicholas', 'Samuel'));
现在,让我们尝试在 Book 表的 book_author 列中插入除 Nicholas 或 Samuel 之外的值:
INSERT INTO Book VALUES(7, 'Best PostgreSQL Book', 'Gregory Bush');
该语句将返回以下错误:
由于违反了检查约束,插入操作失败。
重命名表
以下是重命名表的 ALTER TABLE 命令的语法:
ALTER TABLE table-name RENAME TO new-table-name;
表名是表的当前名称。
new-table-name 是要分配给表的新名称。
例如,让我们将 Book 表的名称更改为 Books:
ALTER TABLE Book RENAME TO Books;
使用 pgAdmin
现在让我们看看如何使用 pgAdmin 执行这些操作。
添加新列
要通过 pgAdmin 完成相同操作,请执行以下操作:
步骤1) 登录您的 pgAdmin 帐户。
步骤2)
- 从左侧导航栏中单击数据库。
- 单击“演示”。
步骤3) 在查询编辑器中输入查询:
ALTER TABLE Book ADD author VARCHAR(50);
步骤4) 单击执行按钮。
步骤5) 要检查该列是否已添加,请执行以下操作:
- 单击左侧导航中的数据库。
- 扩展演示。
- 展开架构。
- 展开公共。
- 展开表格。
- 導展書。
- 展开列。
应该已经添加了该列,如下所示:
重命名表列
要通过 pgAdmin 完成相同操作,请执行以下操作:
步骤1) 登录您的 pgAdmin 帐户。
步骤2)
- 从左侧导航栏中单击数据库。
- 单击“演示”。
步骤3) 在查询编辑器中输入查询:
ALTER TABLE Book RENAME COLUMN author TO book_author;
步骤4) 单击执行按钮。
步骤5) 要检查更改是否成功,请执行以下操作:
- 单击左侧导航中的数据库。
- 扩展演示。
- 展开架构。
- 展开公共。
- 展开表格。
- 導展書。
- 展开列。
各列现在应如下所示:
列更改成功。
设置列的默认值
要通过 pgAdmin 完成相同操作,请执行以下操作:
步骤1) 登录您的 pgAdmin 帐户。
步骤2)
- 从左侧导航栏中单击数据库。
- 单击“演示”。
步骤3) 在查询编辑器中输入查询:
ALTER TABLE Book ALTER COLUMN book_author SET DEFAULT 'Nicholas Samuel';
步骤4) 单击执行按钮。
步骤5) 为了测试,请在查询编辑器上运行以下命令:
INSERT INTO Book (id, name) VALUES (6, 'PostgreSQL for Beginners')
步骤6) 现在,我们可以查询表来检查默认值是否插入到 book_author 列中:
添加检查约束
要通过 pgAdmin 完成相同操作,请执行以下操作:
步骤1) 登录您的 pgAdmin 帐户。
步骤2)
- 从左侧导航栏中单击数据库。
- 单击“演示”。
步骤3) 在查询编辑器中输入查询:
ALTER TABLE Book ADD CHECK (book_author IN ('Nicholas', 'Samuel'))
步骤4) 单击执行按钮。
步骤5) 要测试这一点,请执行以下操作:
- 在查询编辑器中输入以下查询:
INSERT INTO Book VALUES(7, 'Best PostgreSQL Book', 'Gregory Bush');
- 单击执行按钮。
它将返回以下内容:
重命名表
要通过 pgAdmin 完成相同操作,请执行以下操作:
步骤1) 登录您的 pgAdmin 帐户。
步骤2)
- 从左侧导航栏中单击数据库。
- 单击“演示”。
步骤3) 在查询编辑器中输入查询:
ALTER TABLE Book RENAME TO Books;
步骤4) 单击执行按钮。
步骤5) 要检查表是否已重命名,请执行以下操作:
- 单击左侧导航中的数据库。
- 扩展演示。
- 展开架构。
- 展开公共。
- 展开表格。
该表已成功重命名。
结语
- ALTER TABLE 语句用于修改表的结构。
- 根据您需要执行的任务,ALTER TABLE 命令有多种形式。
- 该结构可以是表的列或表本身。
- 我们可以使用此语句来改变表的名称。
- ALTER TABLE 命令可用于设置列的默认值。
- 该语句可用于验证输入到表列中的值。