powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Использование mysql_insert_id() после INSERT
3 сообщений из 3, страница 1 из 1
Использование mysql_insert_id() после INSERT
    #34534176
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Делаю вставку в таблицу, у которой есть автоинкрементное поле:

Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE `example` (
     `id` int( 11 ) NOT NULL auto_increment,
     `val` varchar( 32 ) default NULL,
      PRIMARY KEY  (`id`),
) ENGINE=MyISAM

После вставки тотчасже необходимо получить идентификатор вставленной записи, использую функцию mysql_insert_id().
Тоесть всю операцию делаю в два запроса:

Код: plaintext
1.
2.
INSERT INTO example(val) VALUES('abcdefgh')
SELECT DISTINCT  mysql_insert_id() FROM example

Вопрос - правильно ли всё? не будет ли каких нибудь проблем, связанных с конфликтами - например после выполнения INSERT и перед выполнением SELECT кто нибудь другой параллельно тоже добавит, и SELECT вернет неверное значение..

PS: данные запросы выполняю через JDBC, уровень изоляций транзакций установлен по-умолчанию.
...
Рейтинг: 0 / 0
Использование mysql_insert_id() после INSERT
    #34534187
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS: забыл добавить - разумеется если в данной задаче необходимы транзакции то придется сменить движок для таблицы
...
Рейтинг: 0 / 0
Использование mysql_insert_id() после INSERT
    #34534303
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у вас jdbc драйвер 3.0, то там уже есть возможность получать значение primary key сразу. Никогда сам не пробовал, но в книжках такое встречал. Советую покопаться в туториалах (интерфейс KeyHolder).

пример из Spring

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SqlUpdate su =  new  SqlUpdate();
su.setDataSource(dataSource);
su.setSql("insert into booking(date_made, reserved_until, price) values (?, ?, ?)");
su.declareParameter( new  SqlParameter(Types.TIMESTAMP));
su.declareParameter( new  SqlParameter(Types.TIMESTAMP));
su.declareParameter( new  SqlParameter(Types.DECIMAL));
su.compile();

Object[] parameters =  new  Object[] {dateMade, reservedUntil, price};
KeyHolder keyHolder =  new  GeneratedKeyHolder();
su.update(parameters, keyHolder);
 long  key = keyHolder.getKey().longValue();
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Использование mysql_insert_id() после INSERT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]