Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Можно ли INSERT ом вставлять записи в 2 таблицы сразу?   Найти похожие ветки 

 
SergP ©   (2004-05-23 16:02) [0]

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

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

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

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

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


 
Domkrat ©   (2004-05-23 17:26) [1]

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


 
SergP ©   (2004-05-23 17:30) [2]


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


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


 
Domkrat ©   (2004-05-23 17:41) [3]

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


 
SergP ©   (2004-05-23 17:51) [4]

Кстати хотелось бы добавить записи одним запросом в 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

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


 
Vlad ©   (2004-05-23 17:58) [5]


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

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


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


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


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

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


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


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

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


 
Danilka ©   (2004-05-24 08:53) [8]

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

Почему?

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


 
SergP ©   (2004-05-24 09:11) [9]


>  [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 11:07) [10]

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


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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
3-1084820947
bgelena
2004-05-17 23:09
2004.06.13
Только 5 экземпляров приложения!!!


6-1082526541
atruhin
2004-04-21 09:49
2004.06.13
Перехват на контроллере домена. События входа пользователя.


14-1085648635
VID
2004-05-27 13:03
2004.06.13
Вставка документа в страницу Excel


8-1080060325
__yur__
2004-03-23 19:45
2004.06.13
Как узнать что рисунок имеет белый фон


14-1085376070
ega23
2004-05-24 09:21
2004.06.13
Хокку дня....