Mysql ошибка # 1452 - Невозможно добавить или обновить дочернюю строку - PullRequest
1 голос
/ 10 января 2012

РЕДАКТИРОВАТЬ:

Моя проблема была из-за таблиц используются разные движки.Таблица Chart используется MyISAM и Chartdata используется InnoDB.


У меня очень простая модель БД, но по какой-то причине я не могу заставить работать внешний ключ.Я создал базу данных с помощью Mysql Workbench, и у меня есть две строки в таблице Chart с идентификаторами 3 и 4. Когда я пытаюсь добавить строку в chartdata, я получаю эту ошибку:

INSERT INTO `charts`.`Chartdata` (

`idChartdata` ,
`param1` ,
`param2` ,
`Chart_id` 
)
VALUES (
NULL , '2012-01-10 05:00:00', '58', '3'
) 

#1452 - Cannot add or update a child row: a foreign key constraint fails ( charts . Chartdata , CONSTRAINT fk_Chartdata_Chart FOREIGN KEY ( Chart_id ) REFERENCES Диаграмма ( idChart ) ON DELETE CASCADE ON UPDATE CASCADE)

Я уверен, что внешний ключ существует, и я пытался воссоздать таблицы в строгое время(с небольшими изменениями).

Ссылка на модель БД: http://i.stack.imgur.com/qKZlh.png

Это дамп SQL от PhpMyAdmin:

CREATE TABLE IF NOT EXISTS `Chartdata` (

idChartdata int (11) NOT NULL AUTO_INCREMENT, param1 varchar (500) DEFAULT NULL, param2 varchar (500) DEFAULT NULL, Chart_id int (11) НЕ NULL, ПЕРВИЧНЫЙ КЛЮЧ (idChartdata, Chart_id), KEY fk_Chartdata_Chart (Chart_id)) ENGINE = InnoDB CHARSET ПО УМОЛЧАНИЮ = latin1 AUTO_INCREMENT = 10;

ALTER TABLE Chartdata ADD CONSTRAINT fk_Chartdata_Chart Иностранный ключ (Chart_id) Ссылки Chart(idChart) УДАЛИТЬ КАСКАД ОБНОВИТЬ КАСКАД;

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Моя проблема была из-за того, что в таблицах использовались разные движки. Таблица Chart используется MyISAM и Chartdata используется InnoDB.

0 голосов
/ 10 января 2012

Вы пытаетесь добавить строку в chartdata, с Chart_id = 3. Есть ли диаграмма с idChart = 3?Попробуйте сначала добавить диаграмму с id = 3, а затем выполнить запрос.

[edit] Nvm, вы уже решили это.: D

0 голосов
/ 10 января 2012

удалите NULL в вашем запросе INSERT, поскольку для столбца idChartdata установлено значение Auto_Increment, и повторите попытку.

INSERT INTO `charts`.`Chartdata`(`param1` ,`param2` ,`Chart_id`)
VALUES ('2012-01-10 05:00:00', '58', '3') 
...