|
ALTER TABLESynopsisALTER 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 描述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);
兼容性SQL92ADD COLUMN 形式是兼容的, 除了上面说的缺省(值)和 NOT NULL 约束外。 ALTER COLUMN 形式是完全兼容的。 SQL92 对 ALTER TABLE 声明了一些附加的 PostgreSQL 目前还不直接支持的功能:
重命名表,列/字段,索引,和序列的名字是 PostgreSQL 对 SQL92 的扩展。 |