SQL ADD CONSTRAINT не работает в phpMyAdmin - PullRequest
1 голос
/ 23 апреля 2020

Я хочу добавить внешний ключ в мою таблицу 'reponse'

ALTER TABLE reponse ADD CONSTRAINT FK_5FB6DEC71E27F6BF FOREIGN KEY (question_id) REFERENCES question (id)

Однако, когда я пытаюсь выполнить этот запрос, я получаю эту ошибку

#1452 - Cannot add or update a child row: a foreign key constraint fails (`my_quizz`.`#sql-3f2_11d`, CONSTRAINT `FK_5FB6DEC71E27F6BF` FOREIGN KEY (`question_id`) REFERENCES `question` (`id`))

Моя база данных называется 'my_quizz '.

Моя таблица ответов:

    +------------------+--------------+------+-----+---------+----------------+
| Field            | Type         | Null | Key | Default | Extra          |
+------------------+--------------+------+-----+---------+----------------+
| id               | int(6)       | NO   | PRI | NULL    | auto_increment |
| id_question      | int(11)      | NO   |     | NULL    |                |
| reponse          | varchar(255) | NO   |     | NULL    |                |
| reponse_expected | int(11)      | YES  |     | NULL    |                |
| question_id      | int(11)      | NO   |     | NULL    |                |
+------------------+--------------+------+-----+---------+----------------+

Моя таблица вопросов

    +--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(6)       | NO   | PRI | NULL    | auto_increment |
| id_categorie | int(6)       | YES  |     | NULL    |                |
| question     | varchar(255) | YES  |     | NULL    |                |
| q_id         | int(6)       | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

1 Ответ

0 голосов
/ 23 апреля 2020

В таблице response есть строки, которых question_id не существует в столбце id столбца question. Вам нужно исправить их до того, как ограничение может быть создано, либо изменив question_id в response на что-то, что существует в question(id), либо добавив отсутствующие id s в question.

Вы можете отобразить ошибочные значения с помощью следующего запроса:

select r.question_id
from response r
where not exists (
    select 1
    from question q 
    where q.id = r.question_id
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...