九月 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
语句更改现有表的结构。