[英]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
我不會刪除約束,因為它會影響其他事情(應用程序?報告?無論如何)。 所以問題是你需要什么?
插入所有 ph。 包括沒有用戶的數字
僅插入 ph。 與用戶相關聯的號碼
在任何情況下,將數據加載到“臨時”表調用 temp_phones,沒有任何限制。
如果 1 將數據遷移到 phone_numbers 使 userid = null 如果用戶不再存在。 您可以使用“簡單”查詢來完成
如果 2 僅當在您的用戶表中找到記錄的用戶 ID 時才將數據遷移到 phone_numbers,這也可以通過查詢來完成
您也可以在遷移數據后執行這兩個過程。 在這種情況下,您應該禁用\\刪除約束,根據建議的規則更新用戶 ID,然后重新創建約束
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.