更改表
操作场景
在创建表后如果因为业务场景变动,使用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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论
- 随着数据库的运行,CLOB字段占用的空间可能会慢慢膨胀,使用以下语句收缩CLOB字段占用的空间。
- 创建普通表staffs_f和employeeinfo_f。
- 删除已存在的重名表,以一个已存在的表“staffs_f”和“employeeinfo_f”为例。
- 启用staffs_group表的约束。
- 重命名staffs_group表的uq_staffs约束。
- 修改staffs_group表phone_number列的数据类型为BIGINT。