Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Получение ID последней вставленной записи в многопоточном приложении

4.9K
17 апреля 2009 года
efferson
57 / / 08.12.2005
Добрый день!

Как известно в большинстве СУБД для получения идентификатора последней вставленной записи используется функция "last_insert_id" (название её может варьироваться в разных СУБД). Суть данной функции заключается в том, что она возвращает идентификатор последней изменённой записи в рамках текущего соединения.

Однако, как быть в случае, когда объект доступа к БД представлен как Singleton, а само приложение является многопоточным? Ведь в этом случае возможен вариант, когда два потока почти одновременно произведут запись в БД одном порядке, а вызовут функцию "last_insert_id" в другом.

Возможно ли в данном случае делать запись в БД / получение идентификатора в рамках транзакции? Нет ли здесь каких-нибудь подводных камней? Или же проще lock'ить участок кода, в котором происходит запись / получение ID?
5
17 апреля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: efferson
объект доступа к БД представлен как Singleton, а само приложение является многопоточным?

Если соединение с БД одно, то нужно блокировать сами потоки, так как это разделяемый ресурс (в прочим они и так у вас блокироваться должны).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог