Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день!
Не совсем разобрался, как удалить данные из приведенной ниже схемы БД. У нас есть новостной сайт, который состоит из новостей и обзоров. У новостей и обзоров есть рубрики, которые включают в себя подрубрики. Нам необходимо удалить из БД рубрику, все ее подрубрики и все новости в них. Я так понимаю, что просто банально удалив первую рубрику из таблицы rubrics, мы не удалим тем самым подрубрики в этой рубрике (таблица subrubrics) и не удалим новости (таблица news). Каким же образом должен выглядеть запрос на удаление рубрики, все ее подрубрик, и новостей из этой рубрики? Предположим, что мы хотим удалить рубрику с id_rubric=1.
Сделал такой запрос, но он не работает:
DELETE FROM `rubrics`,
`subrubrics`, `news`
WHERE
rubrics.id_rubric=1, subrubrics.id_rubric=1, news.id_rubric=1
Вообще, я так понимаю, id_rubric является внешним ключом для news и subrubrics. То есть, по идее, SQL не должен давать право удалить запись, являющуюся мигрирующим ключом для других таблиц. У меня почуму-то при запросе DELETE FROM `rubrics` WHERE rubrics.id_rubric`=1; SQL удаляет рубрику, но при этом в связанных таблицах id_rubric=1 остаются, не говоря уже про наличие подрубрик и новостей в сообветствующих полях. Не понял я этого момента...
И каким образом перенести все обзоры из некоторой указанной подрубрики А в некоторую указанную подрубрику В?
Огромное спасибо!
Отредактированно juventine (22.04.2012 15:55:22)
Неактивен
Изменил таблицы следующим образом:
ALTER TABLE `reviews` ADD FOREIGN KEY ( `id_rubric` ) REFERENCES `rubrics` (`id_rubric`) ON DELETE SET NULL ON UPDATE CASCADE ;# Затронуто 8 строк.
ALTER TABLE `subrubrics` ADD FOREIGN KEY ( `id_rubric` ) REFERENCES `rubrics` (
`id_rubric`) ON DELETE CASCADE ON UPDATE CASCADE;# Затронуто 6 строк.
ALTER TABLE `news` ADD FOREIGN KEY ( `id_rubric` ) REFERENCES `rubrics` (
`id_rubric`) ON DELETE CASCADE ON UPDATE CASCADE;# Затронуто 9 строк.
Дальше сделал следующий запрос: DELETE FROM `rubrics` WHERE `rubrics`.`id_rubric`=1
Однако удаляются только поля из таблицы `rubrics`. В таблицах `subrubrics`, `news` не удалились строки с id_rubric=1. Подскажите, пожалуйста, в чем здесь дело?
Метод доступа к таблицам MyISAM.
Схема БД приведена выше.
Заранее огромное спасибо!
Неактивен
MyISAM не поддерживает вторичные ключи, их возможности/ограничения, сделайте тип у таблиц InnoDB.
Неактивен
Скажите, а запрос, в принципе, рабочий?
можно ли в phpmyadmin изменить метод доступа с MyISAM на InnoDB, когда БД уже создана?
Неактивен
Запрос рабочий, да. Можно короче: DELETE FROM `rubrics` WHERE `id_rubric`= 1;
Насчет phpmyadmin не знаю, а вообще можно.
Неактивен