[SQL] insert в связанные таблицы
MySQL - mysql_insert_id вернёт тебе последний сгенерённый при вставке id
Oracle - insert ....... returning ID into <var>
для mssql не знаю, думаю примерно как для ora
всё равно это значение отдельным запросом получать . получить последнее значение секвенции не проблемма . проблемма в том что лишнее действие приходится выполнять .............. и это действие даже явным видом в подзапрос не спрячешь . придумал тут один изврат , будет время - проверю . попробовать заюзать insert .... select ....... . а над селектом отдельно поизвращаться .
ты хочешь всё вставить одним оператором?
ну если извратится - то 2 получится . хотя это изврат , проще процедуру под это написать ...............
см можно тут
P.S. По-моему, для серьезных БД типа Orы и Msа дОлжно тут писать stored procedure. Будет очень быстро и концептуально: конечный пользователь не будет даже знать, что он что-то вставил в 2 таблицы. Могу добравшись до дому с работы, подкинуть примерчик, если кто попросит.
2) процедуру конечно написатьне проблемма , но не стоит этот проект того ................да и непонятно какая там база на хостинге . но всё равно хочется сделать не как всегда - а как лучше . вот испрашиваю можно ли это сделать стандартными средствами ...................
ЗЫ а узнать последнее значение секвенции - самое "базо"-независимое - использовать "max" .
Я про mysql_insert_id... Какой формат использования?
SELECT @@IDENTITY
ЗЫ а узнать последнее значение секвенции - самое "базо"-независимое - использовать "max" .
Ага, особенно если между твоими запросами из другой сессии инсерт сделают. Фпирёд.
да и непонятно какая там база на хостинге
lol
тогда не судьба тебе завершить этот "проект" imho
а узнать последнее значение секвенции - самое "базо"-независимое - использовать "max"
rofl
это будет работать, только если гарантировать отсутствие параллельных изменений этой же таблицы из других сессий/потоков. Для некоторых проектов это, наверное, выполнено...
> выполнено...
заметим, что в этом случае возможны более простые и эффективные решения
Max будет работать, если таблица непуста. Иначе null вернет.
Маза завсети последовательность и сделать два insert`а:
один вставляет в таблицу с primary key со значением NEXT_VAL последовательности,
а второй вставляет в таблицу с FK со значением CURR_VAL
Еще фича про хранимую процедуру. Маза сделать представление из этих вдух таблиц и повесить trigger на добавление записи. Будет децл пальцастей, чем с хранимой процедурой
Оставить комментарий
rfgbnfy
ещё 1 ламерский вопрос (под утро всегда голова хреново работает) ................есть 2 таблицы .
в первой - поле ID , primary key , тип serial (bigint с прикрученной секвенцией) .
во второй таблице - поле IDT - foreign key .
надо вставить в первую таблицу строчку и несколько строк во вторую , соответствующих (idt=id) .
в общем проблемма в том что при вставке в первую таблицу строчки я не знаю с каким id она вставилась . и соответственно без дополнительного запроса не могу заполнить вторую таблицу . можно ли как нибудь избежать этого промежуточного запроса ?