更改表的定义

语法

ALTER TABLE name
  action [, ...]
ALTER TABLE name
  RENAME COLUMN column TO new_column
ALTER TABLE name
  RENAME TO new_name

其中,action 可以为以下语句之一:

ADD column type [ column_constraint [ ... ] ]
DROP COLUMN column
ADD table_constraint
DROP CONSTRAINT constraint_name [ CASCADE ]

说明

ALTER TABLE 更改现有表的定义。有多种子格式:

  • ADD column type:此格式使用与 CREATE TABLE 相同的语法将新列添加到表中。
  • DROP COLUMN:此格式从表中删除列。涉及该列的索引和表约束也将自动删除。
  • ADD table_constraint:此格式使用与 CREATE TABLE 相同的语法将新约束添加到表中。
  • DROP CONSTRAINT:此格式删除表上的约束。目前,表上的约束不必具有唯一名称,因此可以有多个约束与指定的名称匹配。将删除所有匹配的约束。
  • RENAME:RENAME 格式更改表(或索引、序列或视图)的名称,或者更改表中单独列的名称。这对存储的数据没有任何效果。

您必须拥有表才能使用 ALTERTABLE。

说明 当您调用 ADD COLUMN 时,表中的所有现有行将使用该列的默认值初始化(如果未指定 DEFAULT 子句,则为 null)。添加一个具有非 null 默认值的列时,需要重写整个表。对于较大的表而言,这可能需要相当长的时间,并且会临时需要两倍的磁盘空间。添加 CHECK 或 NOT NULL 约束需要扫描表来验证现有行是否满足约束。

DROP COLUMN 格式不会实际删除列,而只是使列对 SQL 操作不可见。表中后面的插入和更新操作会为该列存储 null 值。因此,删除列速度很快,但不会立即减少表在磁盘上占用的大小,因为所删除列占用的空间未回收。随着时间推移,在更新现有行之后,将回收该空间。

不允许更改系统目录表的任何部分。请参阅 CREATE TABLE,进一步了解有效参数的说明。

参数

参数 说明
name 要变更的现有表的名称(可能是 schema 限定的)。
column 新列或现有列的名称。
new_column 现有列的新名称。
new_name 表的新名称。
type 新列的数据类型。
table_constraint 表的新表约束。
constraint_name 要删除的现有约束的名称。
CASCADE 自动删除依赖于所删除约束的对象。

示例

将类型为 VARCHAR2 的列添加到表中:

ALTER TABLE emp ADD address VARCHAR2(30);

从表中删除列:

ALTER TABLE emp DROP COLUMN address;

重命名现有列:

ALTER TABLE emp RENAME COLUMN address TO city;

重命名现有表:

ALTER TABLE emp RENAME TO employee;

将检查约束添加到表中:

ALTER TABLE emp ADD CONSTRAINT sal_chk CHECK (sal > 500);

从表中删除检查约束:

ALTER TABLE emp DROP CONSTRAINT sal_chk;