Форум: "Базы";
Текущий архив: 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