Получение ID последней вставленной записи в многопоточном приложении
Как известно в большинстве СУБД для получения идентификатора последней вставленной записи используется функция "last_insert_id" (название её может варьироваться в разных СУБД). Суть данной функции заключается в том, что она возвращает идентификатор последней изменённой записи в рамках текущего соединения.
Однако, как быть в случае, когда объект доступа к БД представлен как Singleton, а само приложение является многопоточным? Ведь в этом случае возможен вариант, когда два потока почти одновременно произведут запись в БД одном порядке, а вызовут функцию "last_insert_id" в другом.
Возможно ли в данном случае делать запись в БД / получение идентификатора в рамках транзакции? Нет ли здесь каких-нибудь подводных камней? Или же проще lock'ить участок кода, в котором происходит запись / получение ID?
Цитата: efferson
объект доступа к БД представлен как Singleton, а само приложение является многопоточным?
Если соединение с БД одно, то нужно блокировать сами потоки, так как это разделяемый ресурс (в прочим они и так у вас блокироваться должны).