Неведомая ошибка MySQL

После того как на сервере насобирал немного контента, то решил перекинуть его на локальный сервер. Столкнулся с такой ошибкой:#1452 — Cannot add or update a child row: a foreign key constraint fails


INSERT INTO `topic_content` (`topic_id`, `topic_text`, `topic_text_short`, `topic_text_source`
, `topic_extra`) VALUES (6, 'блаблабла— пищевой кблаи блабалбал бла бла бла бла[...]

Ответ MySQL: Документация
#1452 - Cannot add or update a child row: a foreign key constraint fails (`DBNAME`
.`topic_content`, CONSTRAINT `topic_content_fk` FOREIGN KEY
 (`topic_id`) REFERENCES `topic` (`topic_id`) ON DELETE CASCADE ON UPDATE CASCADE) 


Такую ошибку выдает только поле `topic_content` не зависимо от того в какой очередности его дамп закидаешь в базу.

В чем может быть проблема?
ps: поля то добавляются, и контент тоже, но как то не по себе, кода не видишь заветного: «ok» — Показано записи 0 — 18 (~191 всего, запрос исполнялся 0.0013 сек)

UPD: у меня mysql на локальном с офф сайта 5.1 с дефолтными настройками. Только что тот же запрос залил на хостинг — ответ мускула — ок. Странно короче.

9 комментариев

avatar
Проблемы с внешними ключами. Можно попробовать сделать так:

SET FOREIGN_KEY_CHECKS=0
%набор SQL инструкций%
SET FOREIGN_KEY_CHECKS=1


Конечно, правильным решением было бы разобраться в ключах и порядке записи. Возможная проблема — нет записи с topic_id = 6 в таблице topic
avatar
Спасибо. Буду знать как бороться с такого рода ошибкой.
avatar
Конечно, правильным решением было бы разобраться в ключах и порядке записи. Возможная проблема — нет записи с topic_id = 6 в таблице topic
Оно самое. Нужно перепроверить есть ли такой топик
avatar
А точно тип таблиц InnoDB?
avatar
точно, нет :)
avatar
не понял ответа. Данетможетбыть (рус). Незабаром (укр).

Тип таблиц очень желательно иметь ИнноДБ.
avatar
ну да ответ тупой получился, я только сейчас понял (:
«точно» это мне кагбэ КЭП сказал, а Вам было «нет» (:
avatar
&@#^%$? я даже не заметил что на сервере все в myisam, хотя в sql-запросе всё было innoDB, но во всяком случае ошибку локальный выдавал, а на локальном 100% innoDB
avatar
Чтобы руками не искать и не править в phpmyadmin эти самые записи, можно выполнить такой вот запрос:
UPDATE files SET attach = NULL WHERE attach NOT IN (SELECT id FROM pages);

— Обновит все записи в таблице файлов, которые не были «прикреплены» ни к одной странице
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.