2017-01-14 4 views
1

У меня есть эта таблица:Mysql: Код ошибки: 1452. Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не удается

CREATE TABLE comments(
    comment_id int(11) NOT NULL auto_increment, 
    user_id int(11) NOT NULL, 
    product_id int(11) NOT NULL, 
    comment_text varchar(1000) COLLATE utf8_czech_ci NOT NULL, 
    uploaded datetime NOT NULL, 
    primary key(comment_id), 
    constraint fk_user_comments foreign key(user_id) references user(user_id) ON UPDATE CASCADE ON DELETE CASCADE, 
    constraint fk_product_comments foreign key(product_id) references product(product_id) ON UPDATE CASCADE ON DELETE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; 

и я пытаюсь вставить данные в эту таблицу.

INSERT INTO comments(user_id,product_id,comment_text,uploaded) VALUES(1,'brbr',1,Now()); 

Но по какой-то причине, я получаю эту ошибку:

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`project`.`comments`, CONSTRAINT `fk_product_comments` FOREIGN KEY (`product_id`) REFERENCES `product` (`product_id`) ON DELETE CASCADE ON UPDATE CASCADE) 

пользователя с идентификатором 1 существует и продукт с идентификатором 1 существует, так что теперь я понятия не имею, Что вызывает проблему.

+0

Вы не вставляете значение для вашего основного ключа comment_id. Это не правильно. Исправьте это в первую очередь. А также вы можете поделиться структурой и данными из ваших таблиц продуктов и пользователей? И product_id, объявленный как int, предоставляет строковое значение, что неверно. Вот почему ваш запрос выходит из строя. – Venkat

+0

Ох ф ... меня. Теперь я чувствую себя глупым: D. Благодарю. – NoSkilz

+1

@Venkat: _ «Вы не вставляете значение для вашего основного ключа comment_id. Это неправильно» _ Да? Это поле 'auto_increment'. Все дело в том, чтобы не устанавливать его самостоятельно. –

ответ

2

У вас есть список списка столбцов, испорченный. Вы пытаетесь вставить строку с product_id из 'brbr' (которую MySQL рассматривает как 0) и текст комментария 1 (который MySQL преобразует в '1').

Упорядочивание списка в столбце в соответствии со значениями (или вице-Versa) должен решить:

INSERT INTO comments 
(user_id, product_id, comment_text, uploaded)     
VALUES (1, 1, 'brbr', NOW()); 
-- Here ---^ 
1

Это потому, что вы не добавляете значение в соответствии с вашей последовательностью столбцов.

Это правильный запрос.

+0

Пожалуйста, объясните свои ответы, а не только код сбрасывания. –

+0

Извините. Я здесь новенький. @Lightness Races in Otbit –

+0

«Участник за 1 год, 2 месяца» :) –

0

Я встретил ту же проблему сегодня, как я имел дело со схемой, которая не была разработана мной. Я добавил таблицы и отношения (FK), и все прошло KaBoom!

После расследования я обнаружил, что другой приятель использовал MyIsam Engine для этого стола, и я использовал InnoDB.

Изменение таблицы от MyIsam до InnoDB позволило решить проблему!

 Смежные вопросы

  • Нет связанных вопросов^_^