您的位置:寻梦网首页编程乐园数据库PostgreSQL 7.2 Documentation

ALTER TABLE

Name

ALTER TABLE  --  修改表的定义

Synopsis

ALTER TABLE [ ONLY ] 

table

 [ * ]
    ADD [ COLUMN ] 

column

 

type

 [ 

column_constraint

 [ ... ] ]

ALTER TABLE [ ONLY ] 

table

 [ * ]
    ALTER [ COLUMN ] 

column

 { SET DEFAULT 

value

 | DROP DEFAULT }
ALTER TABLE [ ONLY ] 

table

 [ * ]
    ALTER [ COLUMN ] 

column

 SET STATISTICS 

integer


ALTER TABLE [ ONLY ] 

table

 [ * ]
    RENAME [ COLUMN ] 

column

 TO 

newcolumn


ALTER TABLE 

table


    RENAME TO 

newtable


ALTER TABLE 

table


    ADD 

table constraint definition


ALTER TABLE [ ONLY ] 

table


        DROP CONSTRAINT 

constraint


{ RESTRICT | CASCADE }
ALTER TABLE 

table


    OWNER TO 

new owner

 
  

输入

table

试图更改的现存表的名称.

column

现存或新的列名称.

type

新列的类型.

newcolumn

现存列的新名称.

newtable

表的新名称.

table constraint definition

表的新的约束定义.

New user

该表的新所有者的用户名.

输出

ALTER

从被改名的列或表返回的信息.

ERROR

如果一个列或表不存在返回的信息.

描述

ALTER TABLE 变更一个现存表的定义. ADD COLUMN 形式使用与 CREATE TABLE 一样的语法向表中增加一个新列/字段。 ALTER COLUMN SET/DROP DEFAULT 形式允许你从列/字段中设置或者删除缺省(值)。 注意缺省(值)只适用于随后的 INSERT 命令。 它们不会改变已经存在于表中的行. ALTER COLUMN SET STATISTICS 形式允许你为 随后的 ANALYZE 操作 设置收集统计信息的对象. RENAME 子句可以在不影响任何相关数据的情况下更改 一个表,字段,索引或者序列名称。因此, 在此命令执行后数据仍将是相同尺寸和类型。 ADD table constraint definition 子句使用与 CREATE TABLE 一样的语法向表中增加一个新的约束。 DROP CONSTRAINT constraint 子句删除所有表上匹配 constraint 的 CHECK 约束(以及其子表) OWNER 把该表的所有者改为用户 new user .

如果要改变表的纲要,你必须是表的所有者.

注意

COLUMN 关键字是多余的,可以省略.

在目前的 ADD COLUMN 实现里还不支持 新列/字段的缺省(值)和 NOT NULL 子句。不过你可以随后用 ALTER TABLE SET DEFAULT 形式设置缺省(值)。(你可能还想用 UPDATE 把已存在行更新为缺省值。)

目前只有 CHECK 约束可以从表中删除.RESTRICT 关键字是必须的,尽管 并不检查依赖性.还不支持 CASCADE 选项.要删除一个 PRIMARY 或者 UNIQUE 约束,用 DROP INDEX 命令删除相关的索引. 要删除 FOREIGN KEY 约束,你需要重新创建并重新装载该表, 创建的时候使用 CREATE TABLE 命令的其它参数.

比如,要删除在表 distributors 上的所有约束∶

CREATE TABLE temp AS SELECT * FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors AS SELECT * FROM temp;
DROP TABLE temp;
    

要修改表的结构,你必须是表的所有人。不允许更改系统表结构的任何部分。 PostgreSQL 用户手册 里有关于继承的更多信息.

请参考 CREATE TABLE 部分获取更多有效参数的描述.

用法

向表中增加一个 varchar 列:

ALTER TABLE distributors ADD COLUMN address VARCHAR(30);
   

对现存列改名:

ALTER TABLE distributors RENAME COLUMN address TO city;
   

更改现存表的名字∶

ALTER TABLE distributors RENAME TO suppliers;
   

给一个表增加一个检查约束∶

ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);   

删除一个表和它的所有子表的监查约束∶

ALTER TABLE distributors DROP CONSTRAINT zipchk;
   

向表中增加一个外键约束:

ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses(address) MATCH FULL;
   

给表增加一个(多字段)唯一约束∶

ALTER TABLE distributors ADD CONSTRAINT dist_id_zipcode_key UNIQUE (dist_id, zipcode);
   

兼容性

SQL92

ADD COLUMN 形式是兼容的, 除了上面说的缺省(值)和 NOT NULL 约束外。 ALTER COLUMN 形式是完全兼容的。

SQL92 对 ALTER TABLE 声明了一些附加的 PostgreSQL 目前还不直接支持的功能:

ALTER TABLE 

table

 DROP [ COLUMN ] 

column

 { RESTRICT | CASCADE }
      

从一个表中删除一个列. 目前,要删除一个现存的列,表必须重新创建和重新装载:

CREATE TABLE temp AS SELECT did, city FROM distributors;    
DROP TABLE distributors;
CREATE TABLE distributors (
    did      DECIMAL(3)  DEFAULT 1,
    name     VARCHAR(40) NOT NULL
);
INSERT INTO distributors SELECT * FROM temp;
DROP TABLE temp;
       

重命名表,列/字段,索引,和序列的名字是 PostgreSQL 对 SQL92 的扩展。