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

前端之家收集整理的这篇文章主要介绍了ALTER TABLE的用法 增加列、删除列、改列名、改列约束、改表名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
ALTER @H_301_2@ TABLE @H_301_2@
名称
ALTER @H_301_2@ TABLE @H_301_2@—更改表属性
语法
ALTER @H_301_2@ TABLE @H_301_2@ table @H_301_2@ [ * ] @H_301_2@
ADD @H_301_2@ [ COLUMN ] @H_301_2@ column @H_301_2@type
ALTER @H_301_2@ TABLE @H_301_2@ table @H_301_2@ [ * ] @H_301_2@
ALTER @H_301_2@ [ COLUMN ] @H_301_2@ column @H_301_2@{ SET @H_301_2@ DEFAULT @H_301_2@value | @H_301_2@ DROP @H_301_2@ DEFAULT @H_301_2@}
ALTER @H_301_2@ TABLE @H_301_2@ table @H_301_2@ [ * ] @H_301_2@
RENAME [ COLUMN ] @H_301_2@ column @H_301_2@ TO @H_301_2@newcolumn
ALTER @H_301_2@ TABLE @H_301_2@ table @H_301_2@
RENAME TO @H_301_2@newtable
ALTER @H_301_2@ TABLE @H_301_2@ table @H_301_2@
ADD @H_301_2@ table @H_301_2@ constraint @H_301_2@definition
Inputs
table @H_301_2@
试图更改的现存表的名称
column @H_301_2@
现存或新的列名称
type
新列的类型.
newcolumn
现存列的新名称
newtable
表的新名称
table @H_301_2@ constraint @H_301_2@definition
表的新的约束定义.
New table @H_301_2@ constraint @H_301_2@ for @H_301_2@the table @H_301_2@

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

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

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

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

用法
向表中增加一个 VARCHAR @H_301_2@列:
ALTER @H_301_2@ TABLE @H_301_2@distributors ADD @H_301_2@ COLUMN @H_301_2@address VARCHAR @H_301_2@( 30 @H_301_2@);
对现存列改名:
ALTER @H_301_2@ TABLE @H_301_2@distributorsRENAME COLUMN @H_301_2@address TO @H_301_2@city;
对现存表改名:
ALTER @H_301_2@ TABLE @H_301_2@distributorsRENAME TO @H_301_2@suppliers;
向表中增加一个外键约束:
ALTER @H_301_2@ TABLE @H_301_2@distributors ADD @H_301_2@ CONSTRAINT @H_301_2@distfk FOREIGN @H_301_2@ KEY @H_301_2@(address) REFERENCES @H_301_2@addresses(address)MATCH FULL @H_301_2@

兼容性
sql92ADD COLUMN @H_301_2@形式是兼容的,除了上面说的缺省(值)和约束外。 ALTER @H_301_2@ COLUMN @H_301_2@形式是完全兼容的。
sql92对 ALTER @H_301_2@ TABLE @H_301_2@声明了一些附加的Postgres目前还不直接支持功能
ALTER @H_301_2@ TABLE @H_301_2@ table @H_301_2@ DROP @H_301_2@ CONSTRAINT @H_301_2@ constraint @H_301_2@{ RESTRICT @H_301_2@ | @H_301_2@ CASCADE @H_301_2@}
增加删除表的约束(比如象检查约束,唯一约束或外键约束)。要创建或删除一个唯一约束,对应地创建或删除一个唯一索引,要修改其他类型的约束,你需要重建和重载该表,使用  CREATE @H_301_2@ TABLE @H_301_2@ 命令的其他参数.
例如,删除表distributors的任何约束:
CREATE @H_301_2@ TABLE @H_301_2@ temp @H_301_2@ AS @H_301_2@ SELECT @H_301_2@ * @H_301_2@ FROM @H_301_2@distributors;
DROP @H_301_2@ TABLE @H_301_2@distributors;
CREATE @H_301_2@ TABLE @H_301_2@distributors AS @H_301_2@ SELECT @H_301_2@ * @H_301_2@ FROM @H_301_2@ temp @H_301_2@;
DROP @H_301_2@ TABLE @H_301_2@ temp @H_301_2@;
ALTER @H_301_2@ TABLE @H_301_2@ table @H_301_2@ DROP @H_301_2@ [ COLUMN ] @H_301_2@ column @H_301_2@{ RESTRICT @H_301_2@ | @H_301_2@ CASCADE @H_301_2@}
前,要删除一个现存的列,表必须重新创建和重新装载:
CREATE @H_301_2@ TABLE @H_301_2@ temp @H_301_2@ AS @H_301_2@ SELECT @H_301_2@did,city FROM @H_301_2@distributors;
DROP @H_301_2@ TABLE @H_301_2@distributors;
CREATE @H_301_2@ TABLE @H_301_2@distributors(
did DECIMAL @H_301_2@( 3 @H_301_2@) DEFAULT @H_301_2@ 1 @H_301_2@,
name VARCHAR @H_301_2@( 40 @H_301_2@) NOT @H_301_2@ NULL @H_301_2@,
);
INSERT @H_301_2@ INTO @H_301_2@distributors SELECT @H_301_2@ * @H_301_2@ FROM @H_301_2@ temp @H_301_2@;
DROP @H_301_2@ TABLE @H_301_2@ temp @H_301_2@;

@H_301_2@重命名/@H_301_2@字段和表名是Postgresql扩展。sql92没有提供这些。


From:http://www.cnblogs.com/lovko/archive/2009/03/17/1414222.html

猜你在找的Postgre SQL相关文章