九月 10, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的ALTER TABLE语句来修改表的结构。
目录
PostgreSQL ALTER TABLE 语句简介
要更改现有表的结构,可以使用 PostgreSQL 的ALTER TABLE语句。
下面说明了ALTER TABLE语句的基本语法:
ALTER TABLE table_name action;
PostgreSQL 为您提供了许多操作:
要将新列添加到表中,请使用 ALTER TABLE ADD COLUMN 语句,如下:
ALTER TABLE table_name
ADD COLUMN column_name datatype column_constraint;
要从表中删除列,请使用 ALTER TABLE DROP COLUMN 语句,如下:
ALTER TABLE table_name
DROP COLUMN column_name;
要重命名列,请使用ALTER TABLE RENAME COLUMN TO语句,如下:
ALTER TABLE table_name
RENAME COLUMN column_name
TO new_column_name;
要更改列的默认值,您可以使用ALTER TABLE ALTER COLUMN SET DEFAULT或 DROP DEFAULT:
ALTER TABLE table_name
ALTER COLUMN column_name
[SET DEFAULT value | DROP DEFAULT];
要更改NOT NULL约束,请使用ALTER TABLE ALTER COLUMN语句,如下:
ALTER TABLE table_name
ALTER COLUMN column_name
[SET NOT NULL| DROP NOT NULL];
要添加CHECK约束,请使用ALTER TABLE ADD CHECK语句:
ALTER TABLE table_name
ADD CHECK expression;
一般来说,要向表添加约束,可以使用ALTER TABLE ADD CONSTRAINT语句,如下:
ALTER TABLE table_name
ADD CONSTRAINT constraint_name constraint_definition;
要重命名表,请使用ALTER TABLE RENAME TO语句,如下:
ALTER TABLE table_name
RENAME TO new_table_name;
PostgreSQL ALTER TABLE 示例
让我们创建一个新表,名为links,用于练习ALTER TABLE语句。
DROP TABLE IF EXISTS links;
CREATE TABLE links (
link_id serial PRIMARY KEY,
title VARCHAR (512) NOT NULL,
url VARCHAR (1024) NOT NULL
);
要添加一个新列,名为active,请使用以下语句:
ALTER TABLE links
ADD COLUMN active boolean;
以下语句从links表中删除active列:
ALTER TABLE links
DROP COLUMN active;
要将title列的名称更改为link_title,请使用以下语句:
ALTER TABLE links
RENAME COLUMN title TO link_title;
以下语句向links表中添加一个名为target的新列:
ALTER TABLE links
ADD COLUMN target VARCHAR(10);
要给links表中的target列设置默认值为_blank,请使用以下语句:
ALTER TABLE links
ALTER COLUMN target
SET DEFAULT '_blank';
如果在插入新行到links表时未指定target列的值,则target列将采用默认值_blank。例如:
INSERT INTO links (link_title, url)
VALUES('PostgreSQL Tutorial','https://www.rockdata.net/tutorial/');
以下语句从links表中查询数据:
SELECT * FROM links;
输出:
link_id | link_title | url | target
---------+---------------------+------------------------------------+--------
1 | PostgreSQL Tutorial | https://www.rockdata.net/tutorial/ | _blank
(1 row)
以下语句向target列添加一个CHECK约束,要求target列仅接受的值为:_self、_blank、_parent和_top:
ALTER TABLE links
ADD CHECK (target IN ('_self', '_blank', '_parent', '_top'));
如果您尝试插入违反target列的CHECK约束的新行,PostgreSQL 将发出错误,如下例所示:
INSERT INTO links(link_title,url,target)
VALUES('PostgreSQL','http://www.postgresql.org/','whatever');
ERROR: new row for relation "links" violates check constraint "links_target_check"
DETAIL: Failing row contains (2, PostgreSQL, http://www.postgresql.org/, whatever).
以下语句向links表的url列添加UNIQUE约束:
ALTER TABLE links
ADD CONSTRAINT unique_url UNIQUE ( url );
以下语句尝试插入已存在的 url:
INSERT INTO links(link_title,url)
VALUES('PostgreSQL','https://www.rockdata.net/tutorial/');
由于unique_url约束,它会导致错误:
ERROR: duplicate key value violates unique constraint "unique_url"
DETAIL: Key (url)=(https://www.rockdata.net/tutorial/) already exists.
以下语句将links表的名称更改为urls:
ALTER TABLE links
RENAME TO urls;
在本教程中,您学习了如何使用 PostgreSQL 的ALTER TABLE语句更改现有表的结构。