[转]ALTERTABLE的⽤法增加列、删除列、改列名、改列约束、
改表名
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 }
drop删除表前,要删除⼀个现存的列,表必须重新创建和重新装载:
CREATE TABLE temp AS SELECT did, city FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors (
did      DECIMAL(3) DEFAULT1,
name    VARCHAR(40) NOT NULL,
);
INSERT INTO distributors SELECT*FROM temp;
DROP TABLE temp;
重命名列/字段和表名是 PostgreSQL 扩展。SQL92 没有提供这些。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。