Главная страница
    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.032 c
3-1084151171
Beglec
2004-05-10 05:06
2004.05.30
Поиск следующей записи


8-1080038011
IrviS
2004-03-23 13:33
2004.05.30
Пропорциональный размер картинки как в PhotoShop


14-1083912806
Rule
2004-05-07 10:53
2004.05.30
Помогите радиолюбители


1-1084878778
FireMan_Alexey
2004-05-18 15:12
2004.05.30
Активное приложение


3-1083780956
TrOnIc
2004-05-05 22:15
2004.05.30
Подсчет .T. и . F. в таблице





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский