我有一张桌子
Name Age RollNo.
A 1 10
B 2 20
现在我想永久地改变表格,以便在改变之后看起来如下所示
RollNo. Name Age
10 A 1
20 B 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;