Главная страница
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.047 c
1-1084446108
Lexa_1
2004-05-13 15:01
2004.05.30
MouseToCell в TdxDBGrid - как реализовать?


7-1083067682
jk
2004-04-27 16:08
2004.05.30
Как перенести закладки с компонентами с другово профиля


1-1084852165
nedefan
2004-05-18 07:49
2004.05.30
Помогите пожалуйста создать процедуру.


8-1079855856
BenderLog
2004-03-21 10:57
2004.05.30
Как уменьшить размер графического файла?


4-1081779841
Евгения
2004-04-12 18:24
2004.05.30
Чем лучше пользоваться для работы с файлами и каталогами?