建筑工程公司需要什么资质,石家庄seo管理,万维设计,专门做房产的网站由于商业环境中#xff0c;数据是不断变化的#xff0c;客户的需求也是不断变化的#xff0c;所以当一个表用了一段时间后#xff0c;其结构就有可能需要变化。 而在Oracle中#xff0c;提供了alter table这种方式来改变列。
从Oracle9.2版本之后#xff1a;
如果需要变…由于商业环境中数据是不断变化的客户的需求也是不断变化的所以当一个表用了一段时间后其结构就有可能需要变化。 而在Oracle中提供了alter table这种方式来改变列。
从Oracle9.2版本之后
如果需要变更列名可以通过以下命令 alter table 用户名.列名 rename column 旧列名 to 新列名 but修改表中一列名字的操作是会受到一些限制的。
如果所要改名的列上有索引这列的名就不能修改。如果要修改必须先将上面的索引删除掉。
另外修改表中的某一列后基于该表的视图触发器函数过程和软件包等状态都将成为无效因此需要重新编译。
对于一个大型的数据库这样做的成本太高。
当某一个列没用时可以从表中删除这一列。删除列命令从每一行中删除列的长度和数据并释放数据块中的空间。删除大型表中的一列需要相当长的时间。
在一个表中删除一列的命令如下 alter table 用户名.表名
drop column 列名
cascade constraints checkpoint 行数使用上述的语句注意事项
一次只能删除一列删除一列之后该表必须至少还有一列因为alter table是DDL语句所以删除的列是无法恢复的删除的列可以包含数据也可以不包含数据该语句只能在Oracle 8i以上的版本中使用
上面说了在一个大表中执行这个删除列的命令是十分耗时的并且需要大量的还原磁盘空间因此对系统的效率冲击很大。
因此应该尽可能避免在数据库繁忙期间使用上述DDL语句。
当在一个大表中删除一列时可以通过使用checkpoint 行数选项来减少还原磁盘空间的使用量。
例如 在删除命令中使用了check point 1250Oracle没做1250行的操作就会自己产生一个检查点。如果在执行这个命令期间系统崩溃了当重新启动系统后该命令可以从检查点开始继续它的工作而不必重新开始。 alter table 用户名.表名 drop column continue 但如果现在表执行十分繁忙而你的大老板让你立即删除某一个大表中的一列。这个时候又该如何处理呢
又不可能说键盘给你你来弄。O(∩_∩)O嗯! 这个Oracle中也有一个折中的方案 在alter table中使用set unused子句。在一个表中把某一列设置成无用
alter table 用户名.表名
set unused 列名 cascade constraints;
然后当数据库空闲时再利用以下的DDL语句来删除已设置为无用的列
alter table 用户名.表名
drop unused columns checkpoints;注意事项
只能在Oracle 8i版本以上使用只是做一个记号并不是真正的删除这个列。无法使用SQL*PLUS或者SQL语句看到Oracle把设置成无用的列当做删除的列处理可以把一列或者多列设置成无用可以使用DROP列名选项来删除被设置成无用的列因为语句是DDL因此没有恢复无用的列命令。
跟上上面同理如果在该命令执行期间系统崩溃了当重启系统后该命令可以从检查点开始继续它的工作不必从头开始。 格式如下 alter table 用户名.表名 DROP COLUMNS CONTINUE 行数; ok上述就是Oracle列的维护。 我已讲完。