2013-06-18 48 views
3

我想要一個外鍵約束添加到我的USER_INFO表的外鍵的SQL,這是在我的用戶表的主鍵(USER_ID):簡單地增加

ALTER TABLE user_info 
ADD CONSTRAINT fk_userID 
FOREIGN KEY (user_id) 
REFERENCES users(user_id); 

但是,我越來越此錯誤:

Error starting at line 26 in command: 
ALTER TABLE user_info 
ADD CONSTRAINT fk_userID 
FOREIGN KEY (user_id) 
REFERENCES users(user_id) 
Error report: 
SQL Error: ORA-02298: cannot validate (CLAYBANKS.FK_USERID) - parent keys not found 
02298. 00000 - "cannot validate (%s.%s) - parent keys not found" 
*Cause: an alter table validating constraint failed because the table has 
      child records. 
*Action: Obvious 

任何想法?

+1

請添加標籤的那種數據庫。看起來像SQL Server,但也包括年份(2008,2012)將有助於吸引可以幫助你的人的注意力。 – DOK

+0

LOL:「行動:明顯」。那麼,不是真的。 – DOK

+0

@DOK - 這將是Oracle基於「ORA-XXXXX」錯誤代碼 –

回答

3

此錯誤表示您的user_info表中有user_id s表users表中不存在。因此外鍵不能應用。

你只需要刪除所有孤立的記錄(或UPDATE他們null如果可能的話)在users_info表,或在users表中添加相應的條目。嘗試在刪除或更新它們之前找到它們,以避免破壞重要數據。

例如:

DELETE FROM user_info i WHERE user_id NOT IN (SELECT user_id FROM users) 

或者

UPDATE user_info SET user_id = NULL WHERE user_id NOT IN (SELECT user_id FROM users) 
0

這是Oracle錯誤(ORA-XXXXX)。這意味着您的USER_INFO表中有一個或多個行的USER_ID字段不存在於參考表中,在您的情況下表USERS

您可以使用此請求檢索引用的ID是你的非:

SELECT ui.* 
FROM USER_INFO ui 
WHERE NOT EXISTS 
(SELECT * FROM USERS u WHERE u.user_id = ui.user_id)