Главная страница
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.02 c
14-1085556552
BiN
2004-05-26 11:29
2004.06.13
Доступ в интрнет с необитаемого острова


3-1085382118
31512
2004-05-24 11:01
2004.06.13
Одна "сущность" не вписывается в рамки БД!


14-1085398591
Sanek_metaller
2004-05-24 15:36
2004.06.13
Опять Internal Server Error 500


6-1082642467
dark2004
2004-04-22 18:01
2004.06.13
Помогите органиовать поддержку Perl на моем Webсервере


1-1085905033
ilnarab
2004-05-30 12:17
2004.06.13
С помощью OpenDialog-а открыть папку