ALTER TABLE的用法 增加列、删除列、改列名、改列约束、改表名

ALTER   TABLE
名称
ALTER   TABLE  — 更改表属性
语法
ALTER   TABLE   table   [  *  ]
    
ADD   [  COLUMN  ]   column  type
ALTER   TABLE   table   [  *  ]
    
ALTER   [  COLUMN  ]   column  {  SET   DEFAULT  value  |   DROP   DEFAULT  }
ALTER   TABLE   table   [  *  ]
    RENAME 
[  COLUMN  ]   column   TO  newcolumn
ALTER   TABLE   table
    RENAME 
TO  newtable
ALTER   TABLE   table
    
ADD   table   constraint  definition
Inputs
table  
试图更改的现存表的名称. 
column  
现存或新的列名称. 
type 
新列的类型. 
newcolumn 
现存列的新名称. 
newtable 
表的新名称. 
table   constraint  definition 
表的新的约束定义. 
New 
table   constraint   for  the  table

输出
ALTER  
从被更名的列或表返回的信息. 
ERROR 
如果一个列或表不存在返回的信息.
描述
ALTER   TABLE  变更一个现存表的定义. ADD   COLUMN  形式用与  CREATE  TABLE一样的语法向表中增加一个新列 / 字段。 ALTER   COLUMN  形式允许你从列 / 字段中设置或者删除缺省(值)。注意缺省(值)只对新插入的行有效。RENAME 子句可以在不影响相关表中任何数据的情况下更改一个表或者列 / 字段的名称。因此,表或列 / 字段在此命令执行后仍将是相同尺寸和类型。 ADD   table   constraint  definition 子句用与  CREATE  TABLE一样的语法向表中增加一个新的约束。 

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

注意
COLUMN  关键字是多余的,可以省略. 
如果"
* "跟在一个表名后面,表示该命令要对该表和所有继承级别低于该表的表进行操作;缺省时,该属性(更改)不会增加到任何子表或修改任何子表的相关名称。当增加或修改一个上级表(译注:继承级别高的表)的属性时总是应该这样的。否则,象下面这样的在继承级上进行的查询 
SELECT  NewColumn  FROM  SuperClass *
将不能工作,因为子表会比上级表少一个属性。 
在目前的实现里,新列
/ 字段的缺省(值)和约束子句会被忽略。你可以随后用  ALTER   TABLE  的  SET   DEFAULT  形式设置缺省(值)。(你还不得不用  UPDATE  把已存在行更新为缺省值。)

在目前的实现里,只有 
FOREIGN   KEY  约束可以增加到表中.要创建或者删除一个唯一约束,可以创建一个唯一索引(参阅  CREATE   INDEX ).要想增加  check  (检查)约束,你需要重建和重载该表,用的参数是  CREATE   TABLE  命令的其他参数.
要修改表的结构,你必须是表的所有人。不允许更改系统表结构的任何部分。PostgreSQL 用户手册 里有关于继承的更多信息. 

用法
向表中增加一个 
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  distfk  FOREIGN   KEY  (address)  REFERENCES  addresses(address) MATCH  FULL

兼容性
SQL92ADD 
COLUMN  形式是兼容的,除了上面说的缺省(值)和约束外。 ALTER   COLUMN  形式是完全兼容的。 
SQL92 对 
ALTER   TABLE  声明了一些附加的Postgres目前还不直接支持的功能:
ALTER   TABLE   table   DROP   CONSTRAINT   constraint  {  RESTRICT   |   CASCADE  }
增加或删除表的约束(比如象检查约束,唯一约束或外键约束)。要创建或删除一个唯一约束,对应地创建或删除一个唯一索引,要修改其他类型的约束,你需要重建和重载该表,使用 
CREATE   TABLE   命令的其他参数. 
例如,删除表 distributors 的任何约束: 
CREATE   TABLE   temp   AS   SELECT   *   FROM  distributors;
DROP   TABLE  distributors;
CREATE   TABLE  distributors  AS   SELECT   *   FROM   temp ;
DROP   TABLE   temp ;
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 没有提供这些。

你可能感兴趣的:(table)