我们有一个表B,它从另一个表A(另一个DB)获取数据,源表A引入了一个新列并将其作为主键,因此现在我们对表进行DDL更改以添加一个新列并将其作为主键列因为我们的表B已经有一些数据存在,我正在寻找最好的方法来做这项活动我能这么做吗添加新列到我们的表'B',创建唯一索引的新列,一旦我们有数据流入新列,我们创建的表B然后我们将该列作为主键。我需要你的建议
B
A
qzlgjiam1#
问题是:你能用对应于表A的新添加的主键列的值填充现有的表Bfuture 主键列吗?如果是:
如果不是,则:你能“弥补”这些价值吗?例如,在表A中放入一个序列或其他任何有意义的内容,并且不会与表A中的未来主键值冲突?如果是这样的话,就这么做吧。如果不是,那么新添加的“主键”列必须保持为空,这意味着该列可以NOT是主键,因为主键不允许null值。但是,你可以让它成为一个唯一键,因为它允许null值(这将是“旧”的,现有的行),但新添加的行必须在该列中具有唯一值(据我所知,这应该不是问题)。
null
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;
字符串试试看,让我知道。
2条答案
按热度按时间qzlgjiam1#
问题是:你能用对应于表
A
的新添加的主键列的值填充现有的表B
future 主键列吗?如果是:B
并添加新列A
主键值填充它B
并对新添加的列应用主键约束如果不是,则:你能“弥补”这些价值吗?例如,在表
A
中放入一个序列或其他任何有意义的内容,并且不会与表A
中的未来主键值冲突?如果是这样的话,就这么做吧。如果不是,那么新添加的“主键”列必须保持为空,这意味着该列可以NOT是主键,因为主键不允许
null
值。但是,你可以让它成为一个唯一键,因为它允许null
值(这将是“旧”的,现有的行),但新添加的行必须在该列中具有唯一值(据我所知,这应该不是问题)。mzmfm0qo2#
只是好奇你是否可以使用这种方法。
假设:
1.表B在特定列上具有主键b_pk。
1.表B并不是一个拥有百万行的大表。
1.从表A复制到表B的数据也不会太大。
1.请确保您在表B中创建的表A列数据应遵守主键规则(该列中的每行数据应是唯一的)。
步骤
导出备份表B。更改表B删除约束b_pk;
字符串
试试看,让我知道。