ALTER TABLE
概要
使用ALTER TABLE语句更改现有表的定义。
语法
alter_table ::= ALTER TABLE [ ONLY ] name [ * ] alter_table_action [ , ... ] alter_table_action ::= ADD [ COLUMN ] column_name data_type [ alter_column_constraint [ ... ] ] | RENAME TO table_name | DROP [ COLUMN ] column_name [ RESTRICT | CASCADE ] | ADD alter_table_constraint | DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ] | RENAME [ COLUMN ] column_name TO column_name | DISABLE ROW LEVEL SECURITY | ENABLE ROW LEVEL SECURITY | FORCE ROW LEVEL SECURITY | NO FORCE ROW LEVEL SECURITY alter_table_constraint ::= [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE ( column_names ) index_parameters | FOREIGN KEY ( column_names ) references_clause } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] alter_column_constraint ::= [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT expression | UNIQUE index_parameters | references_clause } [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
语义
ALTER TABLE [ ONLY ] name [ * ] alter_table_action [ , ... ] 更改指定的表和依赖项。
- ONLY 将更改限制为指定的表
ADD [ COLUMN ] column_name data_type constraint 添加具有指定数据类型和约束的指定列。
RENAME TO table_name 将表重命名为指定的表名。
DROP [ COLUMN ] column_name [ RESTRICT | CASCADE ] 从表中删除命名列。
- RESTRICT 仅删除指定的
ADD alter_table_constraint 添加具有指定数据类型和约束的指定列。
DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ] 从表中删除命名列。
- RESTRICT —仅删除指定的约束。
- CASCADE —删除指定的约束和所有依赖关系。
**RENAME [ COLUMN ] column_name TO column_name ** 将列重命名为指定名称。
ENABLE / DISABLE ROW LEVEL SECURITY 这将启用或禁用表的行级安全性。如果启用并且该表不存在任何策略,则将应用默认拒绝策略。如果禁用,则将不应用该表的现有策略,并将其忽略。有关如何创建行级安全策略的详细信息,请参见创建策略。
FORCE / NO FORCE ROW LEVEL SECURITY 当用户是表所有者时,这将控制表的行安全策略的应用。如果启用,则当用户是表所有者时,将应用行级安全策略。如果禁用(默认设置),则当用户是表所有者时,将不应用行级安全性。有关如何创建行级安全策略的详细信息,请参见创建策略。
CONSTRAINT constraint_name 指定约束的名称。
Foreign key FOREIGN KEY和REFERENCES指定外键。它用于强制数据的参照完整性。 Unique 这将强制UNIQUE约束在表中指定的列集在表中是唯一的,也就是说,对于约束中指定的列集,没有两行可以具有相同的值 Check 这用于强制指定表中的数据满足该CHECK子句中指定的要求。 Default 用于指定列的默认值。如果INSERT语句未为该列指定值,则使用默认值。如果没有为列指定默认值,则默认值为NULL。
Deferrable constraints 可以使用该DEFERRABLE子句推迟约束。当前,在MemFire中只能推迟外键约束。在语句中的每一行之后,将检查不可延迟的约束。在可延迟约束的情况下,约束的检查可以推迟到事务结束。 标记为 INITIALLY IMMEDIATE 的约束将在语句中的每一行之后进行检查。 标记为 INITIALLY DEFERRED 的约束将在事务结束时检查。