The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"значение автоинкремента во вставленной в таблицу записи"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"значение автоинкремента во вставленной в таблицу записи"  
Сообщение от kerdan on 14-Дек-06, 23:11 
сколько не рыл в книжках не мог найти следующей вещи:
допустим типичный инсерт в таблицу, в которой есть конечно ключевое поле автоикремент.
как вытащить его значение (чтобы тут же создать связанную с этой записью запись в другой таблице).
Я делаю так: SELECT `id` FROM `table` WHERE ORDER BY `id` DESC LIMIT 1;
Но если запрос выполняется на autocommit-сеансе, то там может появится другая запись (паралельным процессом (php-сценарием)).
Подскажите, плиз, есть ли СТАНДАРТНОМ sql такая возможность.
Ну если не таковом, то MySql иди Oracle.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "значение автоинкремента во вставленной в таблицу записи"  
Сообщение от Андрей (??) on 15-Дек-06, 07:47 
>сколько не рыл в книжках не мог найти следующей вещи:
>допустим типичный инсерт в таблицу, в которой есть конечно ключевое поле автоикремент.
>
>как вытащить его значение (чтобы тут же создать связанную с этой записью
>запись в другой таблице).
>Я делаю так: SELECT `id` FROM `table` WHERE ORDER BY `id` DESC
>LIMIT 1;
>Но если запрос выполняется на autocommit-сеансе, то там может появится другая запись
>(паралельным процессом (php-сценарием)).
>Подскажите, плиз, есть ли СТАНДАРТНОМ sql такая возможность.
>Ну если не таковом, то MySql иди Oracle.


в пхп функция mysql_insert_id()

mysql_insert_id

(PHP 3, PHP 4, PHP 5)
mysql_insert_id --  Возвращает ID, сгенерированный при последнем INSERT-запросе.
Описание
int mysql_insert_id ( [resource link_identifier] )


mysql_insert_id() возвращает ID, сгенерированный колонкой с AUTO_INCREMENT последним запросом INSERT к серверу, на который ссылается переданный функции указатель link_identifier. Если параметр link_identifier не указан, используется последнее открытое соединение.

mysql_insert_id() возвращает 0, если последний запрос не работал с AUTO_INCREMENT полями. Если вам надо сохранить значение, убедитесь, что mysql_insert_id() вызывается сразу после запроса.

Замечание: Значение в SQL функции MySQL LAST_INSERT_ID() всегда содержит последний сгенерированный ID и не обнуляется между запросами.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "значение автоинкремента во вставленной в таблицу записи"  
Сообщение от kerdan on 15-Дек-06, 08:32 
спасибо, че-то раньше я ее не приметил - странно, но спасибо большое.
только это mysql, а нет ли стандартной возможности.
так чтоб везде работало, т.е. не php-function, а sql'ная фигня какая-нибудь.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "значение автоинкремента во вставленной в таблицу записи"  
Сообщение от mirya email on 15-Дек-06, 22:11 
>спасибо, че-то раньше я ее не приметил - странно, но спасибо большое.
>
>только это mysql, а нет ли стандартной возможности.
>так чтоб везде работало, т.е. не php-function, а sql'ная фигня какая-нибудь.

В стандарте есть такая вещь, как SEQUENCE, но т.к., напр., MySQL ее не поддерживает, не думаю, что это то, что нужно.

ДЛя справки: в mysql можно сделать

SELECT LAST_INSERT_ID()

это будет эквивалент mysql_insert_id()

А во многих универсальных интерфейсах доступа к БД соотв. универсальный АПИ для автогенерируемых ключей, напр для JDBC

http://java.sun.com/javase/6/docs/api/java/sql/Connection.html#prepareStatement(java.lang.String, int)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "значение автоинкремента во вставленной в таблицу записи"  
Сообщение от kerdan on 15-Дек-06, 22:24 
угу..., хорошо.

но это на самом деле не совсем то.
мне как минимум надо знать три метода (наиболее правильных):
для ODBC    - делаю селектом;
для MySql   - собственно, уже подсказали - спасибо;
для Oracle8 - не знаю :(


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру