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 把已存在行更新为缺省值。)
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;
主键和索引是增加完字段后,在创建的
字段
ALTER TABLE [dbo].[kdinforT] ADD COLUMN [kd_code] [varchar(50)]
索引,主键
CREATE INDEX [index_kd_code] ON [dbo].[kdinforT]([kd_code]) ON [PRIMARY]