一、重命名列
alter table schema.table_name
rename column old_name_column
to new_name_column
修改列名称是有限制的,如果在该列上建有索引,那么该列的列名称就不能修改。如果想要修改就必须删除该列上的索引,对于主键索引尽量避免修改主键列名称。
另外修改表中一列的列名称后,基于该表建立的视图,触发器,函数,过程,软件包都将失效,因此需要重新编译。对于大型是数据库修改列名称的代价是很高的,尽量避免修改列名称。
二、删除列
alter table schema.table_name
drop column column_name
cascade constraints checkpoint 行数
alter语句是ddl语句直接修改数据字典,故删除列后是无法恢复的
删除一列后,表中至少应该还有一列
在一个大型的数据库中删除一列数据时非常耗时的,并且需要很大的还原空间。这对数据库系统的效率的冲击是很大的,所以应该避免在系统繁忙时执行删除列的ddl语句
通过在以上ddl语句中使用checkpoint 行数 可以减少还原磁盘空间的使用量。
checkpoint 500
在oracle执行以上命令后每执行500次的操作就会产生一个检查点,如果在执行以上命令期间系统崩溃了,当重启系统后该命令可以从检查点继续执行工作,不必重新开始。
其命令格式如下:
alter table schema.table_name drop columns continue;
为避免在系统繁忙时执行删除类的命令,可以使用set unused子句,把表中的某一列置为无用
alter table schema.table_name set unused column_name cascade constraints;
该语句是ddl语句一旦设置为无用的列就无法再恢复啦
当数据库空闲时使用一下ddl语句删除无用的列:
alter table schema.table_name
drop unused columns checkpoint 行数
如果执行期间系统崩溃,那么重启后不必从开始重新执行。可以从上一个检查点执行
alter table schema.table_name
drop columns continue 行数。