У меня есть пять таблиц на моем MySQL, все InnoDB.Ошибка внешнего ключа MySQL в таблице соединений
Обычные столы
Table list
Table proc
Table views
ответвительные столы
Table l_p
Table l_p_views
CREATE TABLE IF NOT EXISTS `list` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `proc` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `view` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `l_proc` (
`listId` int(10) unsigned NOT NULL,
`procId` int(10) unsigned NOT NULL,
PRIMARY KEY (`listId`,`procId`),
KEY `l_process_ibfk_2` (`procId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `l_proc`
ADD CONSTRAINT `l_proc_ibfk_1` FOREIGN KEY (`listId`) REFERENCES `list` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `l_proc_ibfk_2` FOREIGN KEY (`procId`) REFERENCES `proc` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
CREATE TABLE IF NOT EXISTS `l_p_view` (
`listd` int(10) unsigned NOT NULL,
`procId` int(10) unsigned NOT NULL,
`viewId` int(10) unsigned NOT NULL,
KEY `listId` (`listId`,`procId`,`viewId`),
KEY `view` (`viewId`),
KEY `l_p_view_ibfk_2_idx` (`procId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `l_p_view`
ADD CONSTRAINT `l_p_view_ibfk_1` FOREIGN KEY (`listId`) REFERENCES `l_proc` (`listId`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `l_p_view_ibfk_3` FOREIGN KEY (`viewId`) REFERENCES `view` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `l_p_view_ibfk_4` FOREIGN KEY (`procId`) REFERENCES `l_proc` (`procId`) ON DELETE CASCADE ON UPDATE CASCADE;
Идея заключается в том, что если удалены, все упомянутые l_proc и l_p_view записывает перечень записи ПОЛУЧИТЬ ныряет удаляется тоже. Это работает по назначению.
Однако, когда я удаляю запись в l_proc как с запросом listId, так и с procId, все записи в l_p_view с одинаковым listId удаляются немедленно - неважно, что их procId отличается от того, что было представлено с оригиналом запрос на удаление для l_proc.
Что мне здесь не хватает?
Rgds, П.
Или в качестве последующего вопроса - может ли таблица иметь два внешних ключа к столбцам на одной таблице? – PMiller