簡體   English   中英

如果違反外鍵約束,如何插入到表中

[英]How to insert into a table if it violates a foreign key constraint

我正在編寫一個在兩個數據庫之間移動數據的腳本。

我正在移動電話號碼表。 每個電話號碼是一個用戶。

問題是每個電話號碼條目都引用一個具有用戶 ID 的用戶。 其中一些用戶不再存在,因此當我嘗試插入時,它返回外鍵約束違規。

insert or update on table "phone_numbers" violates foreign key constraint "fk3843uenfej83jf32wde"
user_id = 10 is not present in table users

但是,我無法刪除每個用戶引用,因為有數千個引用。 那么接近它的最佳方法是什么?

我應該簡單地刪除外鍵約束嗎?

屬於不存在用戶的電話號碼被稱為“孤立”數據。

要么清理源數據中的孤立數據(孤立數據不應該存在):

delete from phone_number
where not exists (select * from user where id = user_id)

或者在導出時不要選擇它們:

select p.*
from phone_number p
join user u on u.id = p.user_id

我不會刪除約束,因為它會影響其他事情(應用程序?報告?無論如何)。 所以問題是你需要什么?

  1. 插入所有 ph。 包括沒有用戶的數字

  2. 僅插入 ph。 與用戶相關聯的號碼

在任何情況下,將數據加載到“臨時”表調用 temp_phones,沒有任何限制。

如果 1 將數據遷移到 phone_numbers 使 userid = null 如果用戶不再存在。 您可以使用“簡單”查詢來完成

如果 2 僅當在您的用戶表中找到記錄的用戶 ID 時才將數據遷移到 phone_numbers,這也可以通過查詢來完成

您也可以在遷移數據后執行這兩個過程。 在這種情況下,您應該禁用\\刪除約束,根據建議的規則更新用戶 ID,然后重新創建約束

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM