暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T 更改表

墨天轮 2019-10-12
4221

更改表

操作场景

在创建表后如果因为业务场景变动,使用ALTER TABLE命令可以更改表的定义。典型的更改场景包括:

  • 重命名表名
  • 添加、更改、删除列
  • 添加、重命名、删除约束
  • 启动、禁用约束
  • 修改外键信息
  • 修改分区信息(具体见管理分区表,本页面不再赘述)
  • 收缩LOB字段

前提条件

使用ALTER TABLE命令更改表时,用户是表的属主则不需要授权,否则需要表的ALTER对象权限,或者ALTER ANY TABLE权限。

注意事项

  • 用户只能修改自己schema下的表名。
  • 普通用户不可以修改数据库系统管理员对象。
  • 增加和修改列属性时,不能指定列唯一索引、主键索引、外键inline约束。
  • 数据库重启回滚期间不支持更改表定义的操作。

操作步骤

本页面介绍更改表的典型场景操作,无特殊声明的话以创建表中创建的普通表为例进行操作。

重命名表名

将staffs表重命名为staffs_group。
ALTER TABLE hr.staffs RENAME TO staffs_group;

添加、更改、删除列

  • 在staffs_group表中增加graduated_time列,数据类型为DATE。
    ALTER TABLE hr.staffs_group ADD graduated_time DATE;
  • 修改staffs_group表phone_number列的数据类型为BIGINT。
    ALTER TABLE hr.staffs_group MODIFY phone_number BIGINT;
  • 删除staffs_group表的commission_pct列。
    ALTER TABLE hr.staffs_group DROP commission_pct;

添加、重命名、删除约束

  • 向staffs_group表添加约束,salary不低于1000,staff_id唯一。
    ALTER TABLE hr.staffs_group ADD CONSTRAINT ck_staffs CHECK(salary>1000); ALTER TABLE hr.staffs_group ADD CONSTRAINT uq_staffs UNIQUE(staff_id);
  • 重命名staffs_group表的uq_staffs约束。
    ALTER TABLE hr.staffs_group RENAME CONSTRAINT uq_staffs TO uq_staffs_new ;
  • 删除staffs_group表的uq_staffs_new 约束。
    ALTER TABLE hr.staffs_group DROP CONSTRAINT uq_staffs_new ;

启动、禁用约束

  • 禁用staffs_group表的约束,并且要检查已有数据是否符合约束。
    ALTER TABLE hr.staffs_group DISABLE CONSTRAINT ck_staffs;
  • 启用staffs_group表的约束。
    ALTER TABLE hr.staffs_group ENABLE CONSTRAINT ck_staffs ;

增加、修改外键信息

  • 删除已存在的重名表,以一个已存在的表“staffs_f”和“employeeinfo_f”为例。
    DROP TABLE IF EXISTS staffs_f; DROP TABLE IF EXISTS employeeinfo_f;
  • 创建普通表staffs_f和employeeinfo_f。
    --创建员工基本信息表 CREATE TABLE staffs_f ( staff_id NUMBER(6) PRIMARY KEY, first_name VARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25), phone_number VARCHAR2(20), graduated_name VARCHAR2(60) ); --创建雇佣信息表 CREATE TABLE employeeinfo_f ( staff_id NUMBER(6), employment_id VARCHAR2(10) PRIMARY KEY, hire_date DATE, salary NUMBER(8,2) );

    employeeinfo_f表的staff_id是staffs_f表的主键,故staff_id是employeeinfo_f表的外键。

  • 修改employeeinfo_f表,增加外键staff_id。
    ALTER TABLE employeeinfo_f ADD CONSTRAINT fk FOREIGN KEY (staff_id) REFERENCES staffs_f(staff_id);
  • 修改employeeinfo_f表的外键约束名称为fk_cons。
    ALTER TABLE employeeinfo_f RENAME CONSTRAINT fk TO fk_cons;

收缩LOB字段空间

  • 更改hr.staffs_group表,新增个人档案信息列profile,数据类型为CLOB。
    ALTER TABLE hr.staffs_group ADD profile CLOB;
  • 随着数据库的运行,CLOB字段占用的空间可能会慢慢膨胀,使用以下语句收缩CLOB字段占用的空间。
    ALTER TABLE hr.staffs_group MODIFY LOB (profile) (SHRINK SPACE);
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论