2013-06-18 6 views
3

Я пытаюсь добавить ограничение внешнего ключа к моей user_info таблице, что является первичным ключом в моей таблице пользователей (user_id):Простое добавление внешнего ключа SQL

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_id s в вашей таблице user_info, которой нет в таблице 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, не содержащееся в таблице, на которую есть ссылка, в вашем случае таблица ПОЛЬЗОВАТЕЛИ.

Вы можете извлечь свой некоммерческий ссылаются идентификаторы, используя этот запрос:

SELECT ui.* 
FROM USER_INFO ui 
WHERE NOT EXISTS 
(SELECT * FROM USERS u WHERE u.user_id = ui.user_id) 
Смежные вопросы