Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли INSERT'ом вставлять записи в 2 таблицы сразу? [D6, WinME]


SergP ©   (2004-05-23 16:02:00) 

Сабж...
База MySQL

Нужно сделать запрос типа:

INSERT INTO table1 a, table2 b (b.id) VALUES (a.id)

(в table1 поле id автоинкрементное)

Можно ли так делать?
а то что-то не получается... Хочу все же знать - проблема в самом запросе или в чем-то другом?


Sergp   (2004-05-24 11:31:00) [1]


> Так не совсем красиво.


Вот и я о том же...
Вроде бы в языке SQL работа с несколькими таблицами предусмотрена и в SELECT  и в DELETE и вроде бы в UPDATE, а про INSERT забыли ... гады...

А как бы все могло получиться красиво одним запросом..... ;)


Danilka   (2004-05-24 11:07:00) [2]

[9] SergP ©   (24.05.04 09:11)
Так не совсем красиво. Вообще, очень часто возникает необходимость узнать id после вставки, поэтому должно быть и в MySQL какое-то стандартное для него решение.


SergP   (2004-05-24 09:11:00) [3]


>  [8] Danilka ©   (24.05.04 08:53)
> [6] SergP ©   (23.05.04 18:11)
> > но их будет (для трех таблиц в моем случае) не 3 а 6.
>
> Почему?


INSERT into c ...
select ... from c ... (узнать значение автоинкр. поля)
INSERT into a ...
select ... from a ... (узнать значение автоинкр. поля)
INSERT into b ...
UPDATE c SET ...


> Кстати, чтобы узнать значение автоинкремента последнего
> инсерта в сессии, в MSSQL есть @@identify, может что-то
> подобное есть и в MySQL?


А х/з. Может быть... Хотя я уже написал несколькими запросами


Danilka   (2004-05-24 08:53:00) [4]

[6] SergP ©   (23.05.04 18:11)
> но их будет (для трех таблиц в моем случае) не 3 а 6.

Почему?

Кстати, чтобы узнать значение автоинкремента последнего инсерта в сессии, в MSSQL есть @@identify, может что-то подобное есть и в MySQL?


Tomkat   (2004-05-24 08:52:00) [5]

Insert вообщето делаетя только в одну таблицу (насколько я знаю , такова спецификация SQL), для автоматической вставки в неск. таблиц можно использовать , как уже здесь говорилось, триггеры, автоинким поля заполнять генераторами, либо использовать хранимые процедуры, только их запускать самому нужно ... Тригерами красивее - AfterInsert на главной таблице и потом цепная реакция :-))


SergP   (2004-05-23 18:11:00) [6]


>  [5] Vlad ©   (23.05.04 17:58)
>
> > SergP ©   (23.05.04 17:51) [4]
>
> На сколько я знаю, такой конструкции в стандарте SQL не
> существует.
> То есть нужно вставить в 3 таблицы - используй 3 разных
> SQL предложения.


Просто я надеялся что в INSERT можно делать и довольно сложные (имеется ввиду с несколькими таблицами) запросы. Думал что как и все другое это просто плохо описано на примерах. Поэтому и ждал что кто-нить ответит. (Это уже второй вопрос по этому поводу).

Но ты меня вроде бы убедил что так у меня не получится: (
> На сколько я знаю, такой конструкции в стандарте SQL не
> существует.


Так что придется действительно делать отдельные запросы, но их будет (для трех таблиц в моем случае) не 3 а 6.


Vlad   (2004-05-23 17:58:00) [7]


> SergP ©   (23.05.04 17:51) [4]

На сколько я знаю, такой конструкции в стандарте SQL не существует.
То есть нужно вставить в 3 таблицы - используй 3 разных SQL предложения.


SergP   (2004-05-23 17:51:00) [8]

Кстати хотелось бы добавить записи одним запросом в 3 и даже в 4 таблицы одновременно (просто есть такая надобность)

Например есть 3 таблицы. Нужно добавить по записи в каждую из них, записать в определенные поля каждой таблицы определенные значения, и кроме того в некоторые поля одних таблиц вставить значения  полей из других таблиц (из этих трех).

Например.  b.id = a.id (a.id - автоинкрементное)
          a.t_id=c.id (с.id - автоинкрементное)
          с.first=a.id (a.id - автоинкрементное)

Получается если нельзя выполнить 1 запрос INSERT, то придется выполнить 6 запросов, 3-INSERT , 2-SELECT , 1- UPDATE

разница все-таки есть, что один запрос, что шесть запросов.


Domkrat   (2004-05-23 17:41:00) [9]

Не представляю ситуацию когда заполняются 2 таблицы 1-1,
может Вам триггер нужен, есть такое в MySql?


SergP   (2004-05-23 17:30:00) [10]


> но ничего не будет страшного если сделать
> 2 запроса Insert


Только придется сделать один запрос, а затем вычислить значение автоинкрементного поля, после чего делать второй запрос.. Так неинтерестно...


Domkrat   (2004-05-23 17:26:00) [11]

C MySql не сталкивался, но ничего не будет страшного если сделать
2 запроса Insert


Наверх

Титульная страница Поиск, карта сайта Написать письмо