Всегда ли $ this -> {Model} -> id после вставки в БД всегда возвращает идентификатор последней вставленной записи - PullRequest
1 голос
/ 08 июля 2011

запросов Cakephp SELECT LAST_INSERT_ID () AS insertID чтобы получить последний идентификатор вставки после вставки, чтобы получить «идентификатор» вставленной записи, но что, если в каком-то другом параллельном процессе другая запись была добавлена ​​до выполнения вышеуказанного запроса?

1 Ответ

1 голос
/ 08 июля 2011

В MySQL LAST_INSERT_ID() зависит от соединения, в противном случае это может привести ко многим нежелательным последствиям.Если другой процесс добавляет запись, чем при использовании другого соединения, то возвращаемое значение для LAST_INSERT_ID() не изменяется для вашего текущего соединения.

Я не думаю, что оно обрабатывается по-другому в других RDBMS, и выне упоминайте, какую систему баз данных вы используете.

В словах MySQL Doc:

Сгенерированный идентификатор сохраняется на сервере для каждого соединения.Это означает, что значение, возвращаемое функцией данному клиенту, является первым значением AUTO_INCREMENT, сгенерированным для самого последнего оператора, влияющего на столбец AUTO_INCREMENT этим клиентом.На это значение не могут повлиять другие клиенты, даже если они генерируют собственные значения AUTO_INCREMENT.Такое поведение гарантирует, что каждый клиент может получить свой собственный идентификатор, не заботясь об активности других клиентов и не нуждаясь в блокировках или транзакциях.

Для получения дополнительной информации см. Документы MySQL .

...