Главная страница
    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.47 MB
Время: 0.031 c
8-1081147608
Ozone
2004-04-05 10:46
2004.06.13
Canvas - > JPEG


14-1085519359
Thor
2004-05-26 01:09
2004.06.13
X Files - чем дело закончилось?


6-1082877505
Daniel
2004-04-25 11:18
2004.06.13
Сокеты в Unix


14-1085815415
Mad Dancer
2004-05-29 11:23
2004.06.13
Колосоккер


8-1080850760
Dima1
2004-04-02 00:19
2004.06.13
HSL представление цвета. Что это такое и как это сделать программ





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский