SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.04.2012 15:13:15

juventine
Участник
Зарегистрирован: 22.04.2012
Сообщений: 4

Удаление и обновление данных из нескольких таблиц

Добрый день!

Не совсем разобрался, как удалить данные из приведенной ниже схемы БД. У нас есть новостной сайт, который состоит из новостей и обзоров. У новостей и обзоров есть рубрики, которые включают в себя подрубрики. Нам необходимо удалить из БД рубрику, все ее подрубрики и все новости в них. Я так понимаю, что просто банально удалив первую рубрику из таблицы 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)


Прикрепленные файлы:
Attachment Icon Структура БД.JPG, Размер: 49,775 байт, Скачано: 323

Неактивен

 

#2 22.04.2012 17:04:34

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Удаление и обновление данных из нескольких таблиц

Прочтите этот топик.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 23.04.2012 00:40:43

juventine
Участник
Зарегистрирован: 22.04.2012
Сообщений: 4

Re: Удаление и обновление данных из нескольких таблиц

Изменил таблицы следующим образом:

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.

Схема БД приведена выше.

Заранее огромное спасибо!

Неактивен

 

#4 23.04.2012 00:42:07

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Удаление и обновление данных из нескольких таблиц

MyISAM не поддерживает вторичные ключи, их возможности/ограничения, сделайте тип у таблиц InnoDB.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 23.04.2012 00:59:45

juventine
Участник
Зарегистрирован: 22.04.2012
Сообщений: 4

Re: Удаление и обновление данных из нескольких таблиц

Скажите, а запрос, в принципе, рабочий?

можно ли в phpmyadmin изменить метод доступа с MyISAM на InnoDB, когда БД уже создана?

Неактивен

 

#6 23.04.2012 01:01:01

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Удаление и обновление данных из нескольких таблиц

Запрос рабочий, да. Можно короче: DELETE FROM `rubrics` WHERE `id_rubric`= 1;
Насчет phpmyadmin не знаю, а вообще можно.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson