日期:2014-05-17  浏览次数:21147 次

修改表结构,更换主键,原来的数据还能留下么?
现有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表。
  但是这样做的话很麻烦,因为数据量较大。请教各位大牛还有其他方法不?
oracle alter sql 数据库

------解决方案--------------------
引用:
现有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表中之前的数据就不能用了,但是这批数据又不能丢掉。
  
  


没看懂你说的是什么。要同步为什么不能C被A同步?

引用:
  我的解决办法是,先导出A表原有数据,然后修改A表结构(添加一列、更换主键),查找C表中对应原A表中每行数据的c的值插入新A表。
  


直接就把A表和B表一起改了完事,他们的主外键的值又不代表业务逻辑。表结构能不动尽量不动,在你对整体一无所知的情况下。


引用:
  但是这样做的话很麻烦,因为数据量较大。请教各位大牛还有其他方法不?


你是用手去一条一条改吗?不是的话数据量大不大有什么区别?大到跑不动了?加索引,做标记分批处理。
------解决方案--------------------
你如果怕丢数据,可以先建一个跟当前表结构相同的表,把数据导入到这个备份表中,然后再该表结构。