Skip to main content

ALTER TABLE

ALTER TABLE 命令用于修改表的定义。

句法

ALTER TABLE table_name 
alter_option;

alter_option 取决于您要对表执行的操作。有关所有支持的子句,请参阅下面的章节。

子句

ADD COLUMN

句法
ALTER TABLE table_name 
ADD [ COLUMN ] column_name data_type [ PRIMARY KEY ] [ DEFAULT default_expr ];
参数或子句描述
ADD [ COLUMN ]此子句可向表中添加新列。COLUMN 是可选项。
column_name指定要添加的列的名称。
data_type新列的数据类型。
DEFAULTDEFAULT 子句可为列设定默认值。插入新行时,若没有为该列设定显式值,则使用该默认值。
default_exprdefault_expr 是不引用当前表中其他列或不涉及子查询的任何常量或不包含变量的表达式。default_expr 的数据类型必须与列的数据类型相匹配。
default_expr 不纯,如使用了 now() 这样的函数,所有历史数据都将用语句执行时的表达式求值结果填充。之后每次插入都会对默认表达式进行求值。
示例
-- 向名为 “employees” 的表添加名为 “age” 的列,数据类型为整数
ALTER TABLE employees ADD age int;
note
  • 如果表是通过 Schema Registry 定义的,则其列无法更改。

  • 此命令添加的列无法被任何现有的物化视图或索引使用。必须创建新的物化视图或索引才能对其进行引用。

DROP COLUMN

句法
ALTER TABLE table_name 
DROP [ COLUMN ] [ IF EXISTS ] column_name;
参数或子句描述
DROP [ COLUMN ]此子句可从表中删除现有列。COLUMN 是可选项。
IF EXISTS如果指定列不存在,不返回错误信息,而会显示警告信息。
column_name指定要删除的列。
示例
-- 从名为 “employees” 的表中删除名为 “fax” 的列 
ALTER TABLE employees DROP fax;
note
  • 如果表是通过 Schema Registry 定义的,则其列无法更改。

  • 无法删除物化视图或索引引用的列。

OWNER TO

句法
ALTER TABLE table_name 
OWNER TO new_user;
参数或子句描述
OWNER TO此子句可将表的所有者更改为指定用户。这将级联更改所有相关的内部对象,相关的索引也将更改。
new_user指定要分配给表的用户。
示例
-- 将名为 “t” 的表的所有者更改为用户 “user1” 
ALTER TABLE t OWNER TO user1;

SET SCHEMA

句法
ALTER TABLE table_name 
SET SCHEMA schema_name;
参数或子句描述
SET SCHEMA此子句可将表移至另一个 schema。表列相关的索引、约束和序列也会移动。
schema_name指定要将表移动到的 schema。
示例
-- 将名为 “test_table” 的表移到名为 “test_schema” 的 schema 中
ALTER TABLE test_table SET SCHEMA test_schema;

RENAME TO

句法
ALTER TABLE table_name
RENAME TO new_name;
参数或子句描述
RENAME TO此子句可更改表的名称。
new_name表的新名称。
示例
-- 将名为 “table0” 表的名称更改为 “table1”
ALTER TABLE table0 RENAME TO table1;