oracle 将主键(新列)添加到包含数据的现有表中

9wbgstp7  于 2023-08-03  发布在  Oracle
关注(0)|答案(2)|浏览(120)

我们有一个表B,它从另一个表A(另一个DB)获取数据,源表A引入了一个新列并将其作为主键,因此现在我们对表进行DDL更改以添加一个新列并将其作为主键列
因为我们的表B已经有一些数据存在,
我正在寻找最好的方法来做这项活动
我能这么做吗
添加新列到我们的表'B',创建唯一索引的新列,一旦我们有数据流入新列,我们创建的表B然后我们将该列作为主键。
我需要你的建议

qzlgjiam

qzlgjiam1#

问题是:你能用对应于表A的新添加的主键列的值填充现有的表Bfuture 主键列吗?如果是:

  • 修改表B并添加新列
  • 用表A主键值填充它
  • 改变表B并对新添加的列应用主键约束

如果不是,则:你能“弥补”这些价值吗?例如,在表A中放入一个序列或其他任何有意义的内容,并且不会与表A中的未来主键值冲突?如果是这样的话,就这么做吧。
如果不是,那么新添加的“主键”列必须保持为空,这意味着该列可以NOT是主键,因为主键不允许null值。但是,你可以让它成为一个唯一键,因为它允许null值(这将是“旧”的,现有的行),但新添加的行必须在该列中具有唯一值(据我所知,这应该不是问题)。

mzmfm0qo

mzmfm0qo2#

只是好奇你是否可以使用这种方法。

假设:

1.表B在特定列上具有主键b_pk。
1.表B并不是一个拥有百万行的大表。
1.从表A复制到表B的数据也不会太大。
1.请确保您在表B中创建的表A列数据应遵守主键规则(该列中的每行数据应是唯一的)。

步骤

导出备份表B。更改表B删除约束b_pk;

Alter table B add (<column name from A> <data type>)

Alter table B add constraint b_pk primary key (<column_name from A>);

insert into B (col1, col2,....)
select col1, col2,.... from A;

字符串
试试看,让我知道。

相关问题