Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / update cascade в рекурсивной таблице и error1451 / 1 сообщений из 1, страница 1 из 1
15.05.2014, 20:56:34
    #38642774
dr_sql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update cascade в рекурсивной таблице и error1451
Нужна БД для хранения областей, городов, районов и сёл.
Решил хранить всё в одной таблице: у каждого района много городов, у каждого города-районов и т.п.
Создание таблицы:
CREATE TABLE IF NOT EXISTS `r_district` (
`id_district` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
`type` enum('область','город','район','село') NOT NULL,
`parent_id` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id_district`),
KEY `parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

И добавление внешнего ключа:
ALTER TABLE `r_district`
ADD CONSTRAINT `r_district_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `r_district` (`id_district`) ON DELETE CASCADE ON UPDATE CASCADE;

Сначала показалось что всё норм, но потом попробывал изменить id_district одной из строк и проверить, как измениться parent_id у "дочерних" элементов.
На запрос
UPDATE `realtor`.`r_district` SET `id_district` = '1222' WHERE `r_district`.`id_district` = 1
mysql ругается:
#1451 - Cannot delete or update a parent row: a foreign key constraint fails (`realtor`.`r_district`, CONSTRAINT `r_district_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `r_district` (`id_district`) ON DELETE CASCADE ON UPDATE CASCADE)
При этом аналогичный DELETE запрос выполняется без проблем.

В гугле накопал похожий пример где сказано, что так не будет работать, но почему? и как это исправить?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / update cascade в рекурсивной таблице и error1451 / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]