Главная страница
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.022 c
14-1083752201
Vlad Oshin
2004-05-05 14:16
2004.05.30
Логические задачи в среду :)


6-1081426907
Makhanev A.S.
2004-04-08 16:21
2004.05.30
Блокирующие Сокеты: можно ли так делать...


7-1083062572
nv_
2004-04-27 14:42
2004.05.30
Как предотвратить повторные запуски ДОС программ?


14-1084540198
Denis_ada
2004-05-14 17:09
2004.05.30
Клиент-серверн. приложение по работе с папками и файлами


1-1084586814
IrBisoff
2004-05-15 06:06
2004.05.30
Немного глуповат вопрос, но StrLeft не обрабатывает строку.