Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

SQL запрос для двух таблиц (добавление и удаление)   Найти похожие ветки 

 
SergP ©   (2004-05-06 23:58) [0]

такая ситуация.
Есть данные в базе, которые можно было бы разместить в одно таблице, но нехорошие человеки зачем-то разделили их на две.
Например:
table1 (поля id, field12 ,field13 и пр.), поле id первичный ключ, автоинкрементное
table2 (поля id, field22 ,field23 и пр.), поле id первичный ключ.

Т.е. то что могло бы быть одной записью, разбивается в данном случае по  двум таблицам, часть полей в одной таблице, другая часть в другой, а поля id обоих таблиц имеют одинаковые значения.

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

2. Как удалить данные сразу из двух таблиц одним запросом ( например по условию table1.field12=10 ) ?

БД MySQL


 
Fedia   (2004-05-07 02:36) [1]

К сожалению одним запросом в MySQL, ни удалить, ни добавить записи сразу в две таблицы не получиться.
В этом случае можно использовать механизм транзакций.
Вот пример при работе с компонентами Zeos Access:
 Form1.ZMySqlTransact1.StartTransaction
 try
   //добавляешь в таблицу с автоинкрементным полем
   Form1.Query1.Close;
   Form1.Query1.Sql.Clear;
   Form1.Query1.Sql.Add("insert into table1 (список полей)
     values (список значений)");
   Form1.Query1.Open;
   //раз поле автоинкрементное, то новое значение, скорее всего будет максимальным
   Form1.Query1.Close;
   Form1.Query1.Sql.Clear;
   Form1.Query1.Sql.Add("Select max(id) from table1");
   Form1.Query1.Open;
   i:=Form1.Query1.Fields[0].AsInteger;

   Form1.Query1.Close;
   Form1.Query1.Sql.Clear;
   Form1.Query1.Sql.Add("insert into table2 (id..список полей)
     values (IntToStr(i)..список значений)");
   Form1.Query1.Open;

   //Утверждаем изменения
   Form1.ZMySqlTransact1.Commit;
 except
   //отказ от уже совершенных действий
   Form1.ZMySqlTransact1.Rollback;
 end;

Удаление осуществлять в том же духе.


 
SergP ©   (2004-05-07 09:38) [2]

>К сожалению одним запросом в MySQL, ни удалить, ни добавить записи сразу
>в две таблицы не получиться.

Это относится только к MySQL или и ко всем другим СУБД?
Если только MySQL, то из-за чего? Из серьезных ограничений у нее - это то что вложенные запросы не поддерживает, а с остальным то у нее вроде бы нормально...


 
Johnmen ©   (2004-05-07 09:52) [3]

http://soft.org.ua/docs/mysql/ru/DELETE.html


 
Erik ©   (2004-05-07 09:56) [4]

max(id) - так определать ключ нельзя! Советую почитать соответствующею литературу.
 Для других серверов можно сделать StordProc и ей передовать все параметры. А она в свою очередь будет делать вставку.


 
SergP ©   (2004-05-07 14:51) [5]

2 Johnmen ©   (07.05.04 09:52)

Спасибо за ссылку.
Вобщем насчет Delete я предполагал что это должно быть где-то так. Но не был уверен. А поэкспериментировать было тоже негде...Попробую...

А вот с вставкой не знаю... Проблема именно в том что поле id в одной таблице должно само установиться (так как оно автоинкрементное), а поле id другой таблицы должно получить это же значение...



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
1-1084544500
ruslan
2004-05-14 18:21
2004.05.30
delphi Timage


3-1084353383
Санёк
2004-05-12 13:16
2004.05.30
Как сделать чтобы LookupComboBox просто подставлял значения


11-1073310593
Yura
2004-01-05 16:49
2004.05.30
замена стандартных модулей на Kol


4-1081938230
Tommy
2004-04-14 14:23
2004.05.30
NTQuerySystemInformation and Threads


7-1083354207
ArchAngel
2004-04-30 23:43
2004.05.30
Мониторинг приложений