![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли 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