![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL запрос для двух таблиц (добавление и удаление) [D6, WinME]
SergP © (2004-05-06 23:58:00)такая ситуация.
Есть данные в базе, которые можно было бы разместить в одно таблице, но нехорошие человеки зачем-то разделили их на две.
Например:
table1 (поля id, field12 ,field13 и пр.), поле id первичный ключ, автоинкрементное
table2 (поля id, field22 ,field23 и пр.), поле id первичный ключ.
Т.е. то что могло бы быть одной записью, разбивается в данном случае по двум таблицам, часть полей в одной таблице, другая часть в другой, а поля id обоих таблиц имеют одинаковые значения.
1. как написать один запрос для добавления данных сразу в обе таблицы, при этом значение поля id первой таблицы устанавливается само (поле автоинкрементное), а значение поля id второй таблицы должно установиться такое же как и у первой?
2. Как удалить данные сразу из двух таблиц одним запросом ( например по условию table1.field12=10 ) ?
БД MySQL
SergP (2004-05-07 14:51:00) [1]2 Johnmen © (07.05.04 09:52)
Спасибо за ссылку.
Вобщем насчет Delete я предполагал что это должно быть где-то так. Но не был уверен. А поэкспериментировать было тоже негде...Попробую...
А вот с вставкой не знаю... Проблема именно в том что поле id в одной таблице должно само установиться (так как оно автоинкрементное), а поле id другой таблицы должно получить это же значение...
Erik (2004-05-07 09:56:00) [2]max(id) - так определать ключ нельзя! Советую почитать соответствующею литературу.
Для других серверов можно сделать StordProc и ей передовать все параметры. А она в свою очередь будет делать вставку.
Johnmen (2004-05-07 09:52:00) [3]http://soft.org.ua/docs/mysql/ru/DELETE.html
SergP (2004-05-07 09:38:00) [4]>К сожалению одним запросом в MySQL, ни удалить, ни добавить записи сразу
>в две таблицы не получиться.
Это относится только к MySQL или и ко всем другим СУБД?
Если только MySQL, то из-за чего? Из серьезных ограничений у нее - это то что вложенные запросы не поддерживает, а с остальным то у нее вроде бы нормально...
Fedia (2004-05-07 02:36:00) [5]К сожалению одним запросом в 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;
Удаление осуществлять в том же духе.