[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Многоступенчатое удаление из БД
SmorodinKA
Добрый день. У меня возник такой вопрос. Есть БД.

В первой таблице region хранятся названия регионов
Во второй таблице area - области
В третьей district - районы

Как можно понять, они все связаны, то есть в таблице area есть поле id_region, а в таблице district - id_area.

Вот теперь мне при удалении региона, надо удалить все подчиненные элементы, то есть все области, подчиненные удаляемому региону и в свою очередь все районы, которые подчинены удаляемым областям.

Как правильнее сделать запрос, натолкните на мысль. Спасибо.
T1grOK
Делать запросы на удаление к каждой нужной таблице или если используются внешние ключи, то можно задать действие при удалении.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Игорь_Vasinsky
delete from region where id_region=2

delete from distrct where id_area in (select id_area from area where id_region=2)

delete from area where id_region = 2 


если у тебя таблицы innodb - то можно было бы сначала внешние ключи проставить, а потом дописать скрипты для таблиц типа


ALTER TABLE Area  WITH CHECK ADD  CONSTRAINT fk_id_region FOREIGN KEY(id_region)
REFERENCES Region (id_region)
ON UPDATE CASCADE
ON DELETE CASCADE
GO


и т.д. - при удалении бы id_region из Region - удалились бы все записи по id_region из Area и т.д.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
глюк какой-то - мой пост этот не виден

delete from region where id_region=2

delete from distrct where id_area in (select id_area from area where id_region=2)

delete from area where id_region = 2 


если у тебя таблицы innodb - то можно было бы сначала внешние ключи проставить, а потом дописать скрипты для таблиц типа


ALTER TABLE Area  WITH CHECK ADD  CONSTRAINT fk_id_region FOREIGN KEY(id_region)
REFERENCES Region (id_region)
ON UPDATE CASCADE
ON DELETE CASCADE
GO


и т.д. - при удалении бы id_region из Region - удалились бы все записи по id_region из Area и т.д.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
DedMorozzz
Каскадное удаление. Читай про это

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.