ALTER TABLE

功能描述

修改表,包括修改表的定义、重命名表、重命名表中指定的列、重命名表的约束、设置表的所属模式、添加/更新多个列、打开/关闭行访问控制开关。

注意事项

  • 本章节只包含dolphin新增的语法,原openGauss的语法未做删除和修改。
  • 当一条语句下有多条子命令时,drop index和rename index会优先其他子命令执行,这两种命令的优先级一致。

语法格式

  • 修改表的定义。

    ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name ) }
        action [, ... ];
    

    其中具体表操作action可以是以下子句之一:

    column_clause
        | {DISABLE | ENABLE} KEYS
        | DROP INDEX index_name [ RESTRICT | CASCADE ]
        | DROP PRIMARY KEY [ RESTRICT | CASCADE ]
        | DROP FOREIGN KEY foreign_key_name [ RESTRICT | CASCADE ]
        | RENAME INDEX index_name to new_index_name
        | ADD table_indexclause
        | MODIFY column_name column_type ON UPDATE CURRENT_TIMESTAMP
    
  • 对一个表进行重建。

    ALTER TABLE table_name FORCE;
    
  • 重命名表。对名称的修改不会影响所存储的数据。

    ALTER TABLE [ IF EXISTS ] table_name 
        RENAME { TO | AS } new_table_name;
    
  • 对表timestamp列添加ON UPDATE属性。

    ALTER TABLE table_name
        MODIFY column_name column_type ON UPDATE CURRENT_TIMESTAMP;
    
  • 对表timestamp列删除ON UPDATE属性。

    ALTER TABLE table_name
        MODIFY column_name column_type;
    
  • ADD table_indexclause

    在表上新增一个索引

    {INDEX | KEY} [index_name] [index_type] (key_part,...)[index_option]...
    

    其中参数index_type为:

    USING {BTREE | HASH | GIN | GIST | PSORT | UBTREE}
    

    其中参数key_part为:

    {col_name[(length)] | (expr)} [ASC | DESC]
    

    其中参数index_option为:

    index_option:{
    	  COMMENT 'string'
    	| index_type
    }
    

    COMMENT、index_type 的顺序和数量任意,但相同字段仅最后一个值生效。

参数说明

  • {DISABLE | ENABLE} KEYS

    禁用和启用一个表的所有非唯一索引。

  • DROP INDEX index_name [ RESTRICT | CASCADE ]

    删除一个表的索引。

  • DROP PRIMARY KEY [ RESTRICT | CASCADE ]

    删除一个表的外键。

  • DROP FOREIGN KEY foreign_key_name [ RESTRICT | CASCADE ]

    删除一个表的外键。

  • RENAME INDEX index_name to new_index_name

    重命名一个表的索引。

说明:

涉及的参数说明可见ALTER TABLE

示例

— 创建表、外键和非唯一索引。

openGauss=# CREATE TABLE alter_table_tbl1 (a INT PRIMARY KEY, b INT);
openGauss=# CREATE TABLE alter_table_tbl2 (c INT PRIMARY KEY, d INT);
openGauss=# ALTER TABLE alter_table_tbl2 ADD CONSTRAINT alter_table_tbl_fk FOREIGN KEY (d) REFERENCES alter_table_tbl1 (a);
openGauss=# CREATE INDEX alter_table_tbl_b_ind ON alter_table_tbl1(b);

— 禁用和启用非唯一索引。

openGauss=# ALTER TABLE alter_table_tbl1 DISABLE KEYS;
openGauss=# ALTER TABLE alter_table_tbl1 ENABLE KEYS;

— 删除索引。

openGauss=# ALTER TABLE alter_table_tbl1 DROP KEY alter_table_tbl_b_ind;

— 删除主键。

openGauss=# ALTER TABLE alter_table_tbl2 DROP PRIMARY KEY;

— 删除外键。

openGauss=# ALTER TABLE alter_table_tbl2 DROP FOREIGN KEY alter_table_tbl_fk;

— 重建表。

openGauss=# ALTER TABLE alter_table_tbl1 FORCE;

— 重命名索引。

openGauss=# CREATE INDEX alter_table_tbl_b_ind ON alter_table_tbl1(b);
openGauss=# ALTER TABLE alter_table_tbl1 RENAME INDEX alter_table_tbl_b_ind TO new_alter_table_tbl_b_ind;

— 删除表。

openGauss=# DROP TABLE alter_table_tbl1, alter_table_tbl2;

相关链接

ALTER TABLE

意见反馈
编组 3备份
2024-02-28 06:36:18
取消