Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2015, 15:35   #1
Jenny89
Пользователь
 
Регистрация: 14.07.2015
Сообщений: 30
По умолчанию удалить связанные записи

Подскажите как можно удалить запись в связанных таблицах? Например 2 таблицы: Клиент и товар. Удаляется в первой таблицы клиент, соответственно удаляются товар во второй таблицы. База данных у меня MySQL Workbench.
Jenny89 вне форума Ответить с цитированием
Старый 31.07.2015, 15:49   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от Jenny89 Посмотреть сообщение
База данных у меня MySQL Workbench.
Вообще, это всего лишь графическая оболочка для работы с СУБД. Сама СУБД называется MySQL. Это просто так к сведению.
Цитата:
Сообщение от Jenny89 Посмотреть сообщение
Подскажите как можно удалить запись в связанных таблицах? Например 2 таблицы: Клиент и товар. Удаляется в первой таблицы клиент, соответственно удаляются товар во второй таблицы.
Есть 3 способа:
  1. Выполнить 2 запроса из самой программы. 1й запрос удаляет связанные данные из 2й таблицы, а 2й запрос удаляет "родительскую" запись из 1й;
  2. Выполнить тоже, что в п.1, но из хранимой процедуры (работает в MySQL 5 и выше);
  3. Сделать связь с какскадным удалением. Тогда, при удалении данных из 1й таблицы, будут автоматически удаляться связанные данные во 2й.

Последний раз редактировалось Streletz; 31.07.2015 в 15:55.
Streletz вне форума Ответить с цитированием
Старый 31.07.2015, 15:52   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Сделать связь с какскадным удалением..
+110 букв для портала
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2015, 16:01   #4
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

я в access и ms sql делал так:

//удаляю все записи из второй таблицы
while not adoquery2.eof do
adoquery2.delete;

//удаляю запись из первой
adoquery1.delete;

может на уровне новичка-дурачка и меня сейчас тут обхают, но оно работает)
Ernest027 вне форума Ответить с цитированием
Старый 31.07.2015, 16:05   #5
Jenny89
Пользователь
 
Регистрация: 14.07.2015
Сообщений: 30
По умолчанию

а можно про каскадное удаление по подробней....

Цитата:
Сообщение от Ernest027 Посмотреть сообщение
я в access и ms sql делал так:

//удаляю все записи из второй таблицы
while not adoquery2.eof do
adoquery2.delete;

//удаляю запись из первой
adoquery1.delete;

может на уровне новичка-дурачка и меня сейчас тут обхают, но оно работает)
мне не все записи из второй таблицы нужно удалять, только те которые относятся к удалённому клиенту (т.е. первой таблицы).

Последний раз редактировалось Stilet; 01.08.2015 в 10:53.
Jenny89 вне форума Ответить с цитированием
Старый 31.07.2015, 16:25   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
мне не все записи из второй таблицы нужно удалять,
так и он не все, а только те, которые ПОПАЛИ в этот набор данных(н/д) (query2).
и ровно ОДНУ(текущую) из другого н/д.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 31.07.2015, 16:31   #7
Jenny89
Пользователь
 
Регистрация: 14.07.2015
Сообщений: 30
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
так и он не все, а только те, которые ПОПАЛИ в этот набор данных(н/д) (query2).
и ровно ОДНУ(текущую) из другого н/д.
Да я уже поняла :-), использовала этот код все отлично функционирует, спасибо!!!
Jenny89 вне форума Ответить с цитированием
Старый 01.08.2015, 10:56   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
можно про каскадное удаление по подробней
Конечно можно:
http://habrahabr.ru/post/194738/
http://www.mysqltutorial.org/mysql-on-delete-cascade/
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2015, 11:07   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

каскадное удаление - это реально тема.
а вот в цикле удалять - это моветон!

если кто-то забыл, то я напоминаю, что MySQL поддерживает удаление ОДНИМ запросом из НЕСКОЛЬКИХ таблиц.

синтаксис примерно такой (ссылка на оф.сайте):
Код:
DELETE АлиасТаблицы1, АлиасТаблицы2  FROM
<тут указание таблиц и обязательно параметров связывания таблицы и параметров отбора>
Цитата:
Первый из числа приведенных в начале данного раздела многотабличный формат команды DELETE поддерживается, начиная с MySQL 4.0.0. Второй многотабличный формат поддерживается, начиная с MySQL 4.0.2.

Идея заключается в том, что удаляются только совпадающие строки из таблиц, перечисленных перед выражениями FROM или USING. Это позволяет удалять единовременно строки из нескольких таблиц, а также использовать для поиска дополнительные таблицы.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить дублирующие записи helpkz SQL, базы данных 8 11.04.2013 13:28
Удалить записи из таблицы, если дата в записи старше 30 дней Aleksandr БД в Delphi 10 28.03.2013 21:33
Удалить записи в форме Swatch Microsoft Office Access 2 22.02.2010 16:57
Не могу удалить записи. Хитрец БД в Delphi 13 02.02.2009 22:28
Удалить 2 записи. ADO... Roof БД в Delphi 9 18.08.2008 20:32