现有A表、B表、C表。A表中主键为  a  varchar(7)  
B表中某列为  b  varchar(7) not null
C表中某列为  c  number(15) not null     原本的关系是,A表中主键a的数据是与B表中b相同的,也就是所谓外键。现在由于需求问题,需要将主键a的数据与c相同。也就是需要更改A表中主键名称以及主键约束(属性)。但是这样的话,A表中之前的数据就不能用了,但是这批数据又不能丢掉。
  我的解决办法是,先导出A表原有数据,然后修改A表结构(添加一列、更换主键),查找C表中对应原A表中每行数据的c的值插入新A表。
  但是这样做的话很麻烦,因为数据量较大。请教各位大牛还有其他方法不?oraclealtersql数据库

解决方案 »

  1.   


    没看懂你说的是什么。要同步为什么不能C被A同步?
    直接就把A表和B表一起改了完事,他们的主外键的值又不代表业务逻辑。表结构能不动尽量不动,在你对整体一无所知的情况下。你是用手去一条一条改吗?不是的话数据量大不大有什么区别?大到跑不动了?加索引,做标记分批处理。
      

  2.   


    没看懂你说的是什么。要同步为什么不能C被A同步?
    直接就把A表和B表一起改了完事,他们的主外键的值又不代表业务逻辑。表结构能不动尽量不动,在你对整体一无所知的情况下。你是用手去一条一条改吗?不是的话数据量大不大有什么区别?大到跑不动了?加索引,做标记分批处理。意思是...原来A表是与B表关联的(a--b),现在要与C表关联(a--c)。但是B表与C表主键不是一个。A表数据还不能丢。现在只能改A表的结构,其他表是不能动的....
      

  3.   


    我目前是create D as select * from A,先把数据保留下来。然后直接砍了A表重建,旧数据写代码块批量修改吧。