Sql 重命名因表重命名而更改的约束引用

Sql 重命名因表重命名而更改的约束引用,sql,oracle,Sql,Oracle,我做了一些SQL更新了一些东西,由于一些限制,我不得不: 将表a重命名为旧表 创建一个表a(包含一些a(现在是a_旧版)没有的列) 把旧的合并成新的 但现在我注意到我有一个问题,因为: 当我将A重命名为A_OLD时,它还将A上的任何约束更改为A_OLD上的约束。 例如: 约束“FK_A”外键(“ID_A”)引用“A_OLD”(“ID_A”)启用 但是我的A_OLD只是暂时的,我该怎么做才能将对A_OLD的任何引用更改为对A的引用?您必须添加一个“新”约束 在内部,数据库不关心事物的名称(很多

我做了一些SQL更新了一些东西,由于一些限制,我不得不:

  • 将表a重命名为旧表
  • 创建一个表a(包含一些a(现在是a_旧版)没有的列)
  • 把旧的合并成新的
但现在我注意到我有一个问题,因为:

当我将A重命名为A_OLD时,它还将A上的任何约束更改为A_OLD上的约束。 例如:
约束“FK_A”外键(“ID_A”)引用“A_OLD”(“ID_A”)启用

但是我的A_OLD只是暂时的,我该怎么做才能将对A_OLD的任何引用更改为对A的引用?

您必须添加一个“新”约束


在内部,数据库不关心事物的名称(很多)。元数据使用对象引用,而不是使用对象的名称。重命名对象不会更改对象的ID,只会更改对象的外部名称。这就是为什么重命名表会导致所有外键“自动”引用表的新名称-外键约束仍然引用与重命名前相同的对象ID。如果您现在已经创建了一个“新”表,并且希望外键引用“新”表,则需要创建一个引用“新”表的新外键。

约束绑定到旧表。不能更改约束以引用其他表。您需要为替换表重新创建约束。