Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.03 c
3-1084367422
Pul
2004-05-12 17:10
2004.05.30
Сортирвка по Blob полю


14-1083786902
Thor
2004-05-05 23:55
2004.05.30
Random и его аналоги.


8-1079770750
andrew werdna
2004-03-20 11:19
2004.05.30
Сглаживание


14-1084354404
Соловьев
2004-05-12 13:33
2004.05.30
Кто борол?


1-1084625634
Zelius
2004-05-15 16:53
2004.05.30
Вопрос по работе с TdxTreeList





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский