九月 10, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的ADD COLUMN
语句向现有表添加一列或多列。
目录
PostgreSQL ADD COLUMN 语句简介
要将新列添加到现有表,请使用 ALTER TABLE ADD COLUMN 语句,如下:
ALTER TABLE table_name
ADD COLUMN new_column_name data_type constraint;
在这个语法中:
- 首先,在
ALTER TABLE
关键字后面指定要添加新列的表的名称。 - 其次,在
ADD COLUMN
关键字后指定新列的名称及其数据类型和约束。
当您向表中添加新列时,PostgreSQL 会将其附加到表的末尾。PostgreSQL 没有选项来指定新列在表中的位置。
要将多列添加到现有表中,可以在ALTER TABLE
语句中使用多个ADD COLUMN
子句,如下所示:
ALTER TABLE table_name
ADD COLUMN column_name1 data_type constraint,
ADD COLUMN column_name2 data_type constraint,
...
ADD COLUMN column_namen data_type constraint;
PostgreSQL ADD COLUMN 语句示例
下面的CREATE TABLE
语句创建一个名为customers
的新表,包含两列:id
和customer_name
:
DROP TABLE IF EXISTS customers CASCADE;
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
customer_name VARCHAR NOT NULL
);
以下语句使用ALTER TABLE ADD COLUMN
语句将phone
列添加到customers
表中:
ALTER TABLE customers
ADD COLUMN phone VARCHAR;
以下语句将fax
和email
列添加到customers
表中:
ALTER TABLE customers
ADD COLUMN fax VARCHAR,
ADD COLUMN email VARCHAR;
要在psql
工具中查看customers
表的结构,可以使用\d
命令,如下:
\d customers
从输出中可以清楚地看到,phone
、fax
和email
列出现在customers
表的列列表的末尾。
将具有 NOT NULL 约束的列添加到已有数据的表中
以下语句将数据插入到customers
表中。
INSERT INTO
customers (customer_name)
VALUES
('Apple'),
('Samsung'),
('Sony');
假设您要将contact_name
列添加到customers
表中:
ALTER TABLE customers
ADD COLUMN contact_name VARCHAR NOT NULL;
PostgreSQL 发出错误:
ERROR: column "contact_name" contains null values
这是因为contact_name
列有 NOT NULL 约束。当 PostgreSQL 添加该列时,这个新列会得到NULL
值,这违反了NOT NULL
约束。
为了解决这个问题…
首先,添加没有NOT NULL
约束的列:
ALTER TABLE customers
ADD COLUMN contact_name VARCHAR;
其次,更新contact_name
列中的值。
UPDATE customers
SET contact_name = 'John Doe'
WHERE id = 1;
UPDATE customers
SET contact_name = 'Mary Doe'
WHERE id = 2;
UPDATE customers
SET contact_name = 'Lily Bush'
WHERE id = 3;
第三步,设置contact_name
列的NOT NULL
约束。
ALTER TABLE customers
ALTER COLUMN contact_name SET NOT NULL;
在本教程中,您学习了如何使用 PostgresSQL 的ADD COLUMN
语句向表中添加一列或多列。