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 表
该表有两个列,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 是要重命名列的表的名称。
old-name 是列的旧/当前名称。
new-name 是列的新名称。请看下面的 Book 表
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 是要设置默认值的列的名称。
value 是该列的默认值。
请看下面的 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 是要修改的表的名称。
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');
该语句将返回以下错误
由于违反了检查约束,插入操作失败。
重命名表
以下是用于重命名表的 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)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
ALTER TABLE Book ADD author VARCHAR(50);
步骤 4) 点击 Execute 按钮。
步骤 5) 要检查列是否已添加,请执行以下操作
- 点击左侧导航栏中的 Databases。
- 展开 Demo。
- 展开 Schemas。
- 展开 Public。
- 展开 Tables。
- 展开 book。
- 展开 Columns。
列应该已添加,如下图所示
重命名表列
要通过 pgAdmin 完成相同的操作,请执行此操作
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
ALTER TABLE Book RENAME COLUMN author TO book_author;
步骤 4) 点击 Execute 按钮。
步骤 5) 要检查更改是否成功,请执行以下操作
- 点击左侧导航栏中的 Databases。
- 展开 Demo。
- 展开 Schemas。
- 展开 Public。
- 展开 Tables。
- 展开 book。
- 展开 Columns。
列现在应该如下所示
列已成功更改。
为列设置默认值
要通过 pgAdmin 完成相同的操作,请执行此操作
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
ALTER TABLE Book ALTER COLUMN book_author SET DEFAULT 'Nicholas Samuel';
步骤 4) 点击 Execute 按钮。
步骤 5) 要测试,请在查询编辑器中运行以下命令
INSERT INTO Book (id, name) VALUES (6, 'PostgreSQL for Beginners')
步骤 6) 现在,我们可以查询表以检查 book_author 列中是否已插入默认值。
添加检查约束
要通过 pgAdmin 完成相同的操作,请执行此操作
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
ALTER TABLE Book ADD CHECK (book_author IN ('Nicholas', 'Samuel'))
步骤 4) 点击 Execute 按钮。
步骤 5) 要测试此功能,请执行以下操作
- 在查询编辑器中键入以下查询
INSERT INTO Book VALUES(7, 'Best PostgreSQL Book', 'Gregory Bush');
- 点击 Execute 按钮。
它将返回以下结果
重命名表
要通过 pgAdmin 完成相同的操作,请执行此操作
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
ALTER TABLE Book RENAME TO Books;
步骤 4) 点击 Execute 按钮。
步骤 5) 要检查表是否已重命名,请执行以下操作
- 点击左侧导航栏中的 Databases。
- 展开 Demo。
- 展开 Schemas。
- 展开 Public。
- 展开 Tables。
表已成功重命名。
摘要
- ALTER TABLE 语句用于修改表的结构。
- ALTER TABLE 命令根据您需要执行的任务而有不同的形式。
- 结构可以是表的列,也可以是表本身。
- 我们可以使用此语句更改表的名称。
- ALTER TABLE 命令可用于设置列的默认值。
- 该语句可用于验证输入到表列中的值。