表的数据量太大,drop column,add column 的方法不好用,而且8.17不支持
rename column,请问有什么的解决方法?

解决方案 »

  1.   

    create table_tmp as 
    select col newcol,col2,col3…… from table;
    rename table to table_old;
    rename table_tmp to table;
      

  2.   

    爱新觉罗至尊宝
    这个方法看上去是简单,但是实际上新建一个表,增加的数据,复制的数据都很大,至少比删除一个列大的多
    oraclealter table t1 add(newcol(oldtype) null);--已有记录,新增加列要求是空的,类型同原来的
    update t1 set newcol=oldcol;
    alter table t1 modify(newcol not null);--增加旧列一样的约束条件
    --如果不需要旧列,删除之:
    alter table t1 drop(oldcol)另外的简单解决方案,不用修改任何结构或者移动数据:
    1.对列增加注释,使得明白旧列名的意义,用户是不需要知道数据字段名的意义的,程序员只要明白即可,然后出报表的时候再select oldcolname as newname from t1即可.
    或者
    2.建立一个视图,create view v_t1 as select oldcol as newcol,other1,other2... from t1
      

  3.   

    create   table_tmp   as   select新建的表仅仅保存了数据和类型,所有的列的约束条件和外码关系全部需要重建,很麻烦的。