ALTER TABLE
ALTER TABLE 更改表的定义。
支持的语法
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] action [, ... ] ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME [ COLUMN ] column_name TO new_column_name ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME CONSTRAINT constraint_name TO new_constraint_name ALTER TABLE [ IF EXISTS ] name RENAME TO new_name ALTER TABLE [ IF EXISTS ] name SET SCHEMA new_schema where action is one of: ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ] ALTER [ COLUMN ] column_name SET DEFAULT expression ALTER [ COLUMN ] column_name DROP DEFAULT ALTER [ COLUMN ] column_name DROP NOT NULL ALTER [ COLUMN ] column_name DROP EXPRESSION [ IF EXISTS ] ALTER [ COLUMN ] column_name ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] ALTER [ COLUMN ] column_name { SET GENERATED { ALWAYS | BY DEFAULT } | SET sequence_option | RESTART [ [ WITH ] restart ] } [...] ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ] ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ADD table_constraint_using_index DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } and table_constraint_using_index is: [ CONSTRAINT constraint_name ] UNIQUE USING INDEX index_name
说明
ADD [ COLUMN ] [ IF NOT EXISTS ]-
此表单使用与 CREATE TABLE 相同的语法向表中添加一个新列。如果指定
IF NOT EXISTS并且具有此名称的列已经存在,将不会引发任何错误。 SET/DROP DEFAULT-
这些表单为列设置或移除默认值(其中,移除等同于将默认值设置为 NULL)。新的默认值将仅适用于后续
INSERT或UPDATE命令;它不会导致表中已有的行发生变化。 DROP NOT NULL-
此表单将列更改为支持 null 值。
DROP EXPRESSION [ IF EXISTS ]-
此表单将存储的生成列转换为普通的基列。列中的现有数据会保留,但未来的更改将不再应用生成表达式。如果指定了
DROP EXPRESSION IF EXISTS并且该列不是生成的列,则不会引发任何错误。在这种情况下,将改为发出通知。 ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITYSET GENERATED { ALWAYS | BY DEFAULT }DROP IDENTITY [ IF EXISTS ]-
这些格式更改列是否为标识列,或更改现有标识列的生成属性。有关详细信息,请参阅CREATE TABLE。比如
SET DEFAULT,这些格式只影响后续INSERT和UPDATE命令的行为;它们不会导致表中已有的行发生变化。sequence_option是 ALTER SEQUENCE(如INCREMENT BY)支持的选项。这些格式更改现有标识列所基于的序列。注意
Amazon Aurora DSQL 在使用
ADD GENERATED AS IDENTITY时需要一个显式CACHE值。此外,标识列仅在bigint列上受支持。使用标识列时,应谨慎考虑缓存值。有关更多信息,请参阅 CREATE SEQUENCE 页面上的“重要提示”标注。
有关如何根据工作负载模式以最佳方式使用标识列的指导,请参阅使用序列和标识列。
SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }-
此形式用于设置列的存储模式。有关可用的存储模式的详细信息,请参阅 CREATE TABLE 页面上的存储模式。
ADDtable_constraint_using_index-
此格式基于现有的唯一索引,向表添加新的
UNIQUE约束。索引的所有列都将包含在约束中。索引必须处于
VALID状态;不支持使用当前正在构建中的索引来添加唯一约束。如果提供了约束名称,则索引将被重命名以匹配约束名称。否则,约束的命名将与索引相同。
执行此命令后,索引由约束“拥有”,这种拥有方式就像索引是由常规
CREATE UNIQUE INDEX ASYNC命令构建一样。特别的地方在于,删除约束也会使索引消失。 DROP CONSTRAINT [ IF EXISTS ]-
此表单会删除表上的指定约束以及该约束下的所有索引。如果指定了
IF EXISTS但该约束不存在,则不会引发任何错误。在这种情况下,将改为发出通知。重要
目前,
CREATE TABLE表达式支持添加新约束。ALTER TABLE ADD CONSTRAINT(对DROP CONSTRAINT的镜像支持)尚不可用。如果您对这项即将推出的功能有任何疑问,请联系 AWS Support 或直接通过 DSQL Public Discord联系我们。 OWNER TO-
此表单将表的所有者更改为指定的用户。
RENAME-
RENAME表单更改表的名称、表中单个列的名称或表中约束的名称。重命名具有基础索引的约束时,也会重命名索引。对存储的数据没有任何影响。 SET SCHEMA-
此表单将表移到另一个架构中。表列所拥有的关联索引、约束和序列也会移动。
参数
IF EXISTS-
如果表不存在,不引发错误。在这种情况下,将发出通知。
name-
要更改的现有表的名称(可选择架构限定)。如果在表名之前指定了
ONLY,则仅更改该表。如果未指定ONLY,则会更改该表及其所有子代表(如果有)。(可选)可以在表名后指定*,以显式表示包含子代表。 column_name-
新列或现有列的名称。
new_column_name-
现有列的新名称。
new_name-
表的新名称。
data_type-
新列的数据类型。
constraint_name-
新约束或现有约束的名称。
CASCADE-
自动删除依赖于已删除约束的对象(例如,引用该列的视图),进而删除依赖于这些对象的所有对象。
RESTRICT-
如果存在任何依赖对象,则拒绝删除约束。这是默认行为。
new_owner-
表的新所有者的用户名。
new_schema-
表将移动到的架构的名称。