更改表Oracle 11gr2的物理结构

时间:2013-01-10 06:18:17

标签: sql database oracle database-design

我有一张桌子

Name              Age                    RollNo.
A                  1                      10
B                  2                      20

现在我想永久地改变表格,以便在改变之后看起来如下所示

RollNo.           Name                    Age
10                 A                      1
20                 B                      2

我该如何改变这张表,我想做的就是改变表的物理结构。

2 个答案:

答案 0 :(得分:3)

为什么你想这么做?

如果只是因为您希望在使用SELECT *时拥有正确的列顺序,那么您首先不应该使用*。始终使用查询中的确切列列。

如果是因为您认为它会改善性能,您是否完成了实际测量?我怀疑你会发现许多场景,其中改变物理列顺序会以显着的方式影响性能。有些情况下链接的行可能会出现(参见this article中的“行链接”部分),但这不适用于像你这样的窄行。


话虽如此,你可以:

  • CREATE TABLE NEW_TABLE AS SELECT <different column order> FROM OLD_TABLE
  • NEW_TABLE上重新创建所有相关约束(例如键,FK),索引和触发器/过程。
  • DROP TABLE OLD_TABLE
  • ALTER TABLE NEW_TABLE RENAME TO OLD_TABLE

如果您在接受更新时需要这样做,可能还需要查看dbms_redefinition

答案 1 :(得分:0)

您可以使用语句

删除并创建表而不会丢失oracle中的数据
create table YOUR_TABLE_BU as select * from YOUR_TABLE

请查看链接 - How can I create a copy of an Oracle table without copying the data?了解详情。尝试:

CREATE TABLE YOUR_TABLE_BU AS SELECT * FROM YOUR_TABLE;

DROP TABLE YOUR_TABLE;

CREATE TABLE YOUR_TABLE AS SELECT RollNo., Name, Age FROM YOUR_TABLE_BU;

DROP TABLE YOUR_TABLE_BU;