2015-10-19 2 views
0

Я пытаюсь добавить в таблицу своей базы данных, но, похоже, получить сообщение об ошибке. Я получаю ошибку 1452. Вот что я думаю о проблеме: я думаю, что мой parent_fk ссылается на id, которого еще нет. По крайней мере, это то, что я понимаю, из-за ошибки:Почему мой оператор вставки не работает?

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (assetgallery.ag_asset, CONSTRAINT fk_ag_asset_2 FOREIGN KEY (parent_fk) REFERENCES ag_asset (id) ON DELETE CASCADE ON UPDATE CASCADE)

Say У меня есть кортеж в моей базе данных с идентификатором 2. Первый кортеж:

'2', '8', NULL, NULL, '2', '2015-09-24 09:42:31', 'sabernLogo_0.png', NULL, NULL, NULL, '180', '80', NULL, '1', NULL, NULL, '3', '1' 

Я пытаюсь добавить другой с оператором INSERT. Я Вставка без идентификатора, так это выглядит следующим образом:

Insert into ag_asset 
(album_fk, parent_fk, head_fk, status_fk, modified, filename, title, `desc`, `text`, width, height, owner_fk, locked, remarks, group_fk, user_fk, type_fk) 
VALUES(6, 0, null, 1, '2015-10-15 15:47:13.0', 'index.png', null, null, null, 215, 234, null, null, null, null, 3, 1); 

Из того, что я понимаю, потому что мой идентификатор Autoincrement «под ред, не заполняя это в приведет к свежеприготовленного ид, будучи 2. Вот оператор создания

CREATE TABLE `ag_asset` ( 
`id` int(10) NOT NULL AUTO_INCREMENT, 
`album_fk` int(10) DEFAULT NULL, 
`parent_fk` int(10) DEFAULT NULL, 
`head_fk` int(10) DEFAULT NULL, 
`status_fk` int(10) DEFAULT '1', 
`modified` datetime NOT NULL, 
`filename` varchar(255) DEFAULT NULL, 
`title` varchar(255) DEFAULT NULL, 
`desc` text, 
`text` longtext, 
`width` int(10) DEFAULT NULL, 
`height` int(10) DEFAULT NULL, 
`owner_fk` int(10) DEFAULT NULL, 
`locked` int(10) DEFAULT NULL, 
`remarks` text, 
`group_fk` int(10) DEFAULT NULL, 
`user_fk` int(10) DEFAULT NULL, 
`type_fk` int(10) DEFAULT '1', 
PRIMARY KEY (`id`), 
KEY `in_filename` (`filename`(12)), 
KEY `in_title` (`title`(12)), 
KEY `fk_ag_asset_1` (`album_fk`), 
KEY `fk_ag_asset_2` (`parent_fk`), 
KEY `fk_ag_asset_3` (`head_fk`), 
KEY `fk_ag_asset_4` (`status_fk`), 
KEY `fk_ag_asset_5` (`owner_fk`), 
KEY `fk_ag_asset_6` (`type_fk`), 
CONSTRAINT `fk_ag_asset_1` FOREIGN KEY (`album_fk`) REFERENCES `ag_album` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
CONSTRAINT `fk_ag_asset_2` FOREIGN KEY (`parent_fk`) REFERENCES `ag_asset` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
CONSTRAINT `fk_ag_asset_3` FOREIGN KEY (`head_fk`) REFERENCES `ag_asset` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
CONSTRAINT `fk_ag_asset_4` FOREIGN KEY (`status_fk`) REFERENCES  `ag_status` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
CONSTRAINT `fk_ag_asset_5` FOREIGN KEY (`owner_fk`) REFERENCES `ag_owner` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
CONSTRAINT `fk_ag_asset_6` FOREIGN KEY (`type_fk`) REFERENCES `ag_type` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8; 

Правильно ли я понимаю ошибку, или я даже смотрю в неправильном направлении?

+0

Вы правы. 'parent_fk' установлен в' 0'. Попытайтесь изменить это на 'NULL'. То есть 'VALUES (6, null, null, ...' – AmazingDreams

ответ

0

В концепции внешнего ключа любое значение, которое вы пытаетесь вставить/обновить в дочерней таблице, должно существовать в его родительской/ссылочной таблице.

Здесь вы пытаетесь вставить значения, такие как 0, NULL и т. Д. В столбцы для созданных вами ссылок, и ваша основная таблица не сохраняет эти значения.

Solution1:

Либо сначала добавьте эти значения в основной таблице, то вы можете вставить в дочерней таблице.

Solution2:

Если вы хотите добавить такие данные в детской таблице принудительно согласно вашему требованию, не предложил, то вы можете сделать как-

set foreign_key_checks=0; 
Insert statement here... 
set foreign_key_checks=1; 
+0

Да, это то, что я понял. Я не создал базу данных, к сожалению. Никто, кажется, не знает, что есть fk, который является нулевым. Поскольку он не используется i рекомендуется удалить fk, который ссылается сам по себе, поскольку он не используется. Благодарим вас за ответ. Я понимаю, что не рекомендуется отключать проверки fk, чтобы добавить что-то, а затем включить его снова. fk не бесполезно? – Nina

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

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