Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

Можно ли 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.032 c
4-1083948129
Ded Moroz
2004-05-07 20:42
2004.06.13
CallerID


1-1085979482
Litr
2004-05-31 08:58
2004.06.13
Chart


14-1085636152
Соловьев
2004-05-27 09:35
2004.06.13
Сколько 1-ых битов в байте? :)


1-1085818204
Александр
2004-05-29 12:10
2004.06.13
"Canvas Doesn t allow drawing"


4-1083823284
alsov1
2004-05-06 10:01
2004.06.13
Как считать уникальный номер с CD и есть ли такой вообще?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский