如何解决将现有外部约束更改为新表
USER
----
Id Number
Name Varchar
SSN Number
出于某种原因,我们想将 SSN
更改为 Varchar
。因为它不是空的,所以我们创建了一个新表而不是改变现有的:
USER2
-----
Id Number
Name Varchar
SSN Varchar
将所有数据从 USER
复制到 USER2
。
然后将原来的 USER
重命名为 USER_BACKUP
。
将 USER2
重命名为 USER
。
我知道这是一个糟糕的方法,但不幸的是它已经完成并正在使用中。
截至今天,新的 USER
表领先于 USER_BACKUP
,因为现在已经添加和删除了一些数据。
现在有 2 个现有表 ADDRESS
和 USER_ADDRESS
。
USER_ADDRESS
使用用户 ID(Foreign_Key) 和地址 ID(Foreign_Key) 存储 USER
和 ADDRESS
之间的关系数据。
USER_ADDRESS
------------
Id Number
User_id Number
Address_Id Number
但是由于原来的USER被重命名了,外部约束也被重命名了,并没有指向新的USER
,而是指向了USER_BACKUP
,这不是我想要的。
USER_BACKUP
中的数据现在与我无关。
我应该遵循哪些步骤将 USER_ADDRESS
指向新的 USER
表,而不影响两个表中的数据。
请提出建议。
附言- 我们使用的是 Oracle 18C。
解决方法
添加新约束并删除旧约束。
ALTER TABLE user_address ADD CONSTRAINT user_address__id__fk
FOREIGN KEY (user_id) REFERENCES "USER" ( id );
ALTER TABLE user_address DROP CONSTRAINT name_of_previous_fk_to_user_backup;
如果两个表中的数据仍然足够相似,那么它就会起作用。
如果您从新的 USER
表中删除了仍在 USER_BACKUP
中并从 USER_ADDRESS
表中引用的项目,那么它将失败,您需要协调表。
dbfiddle here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。