2010-01-23 1 views
3

Я использую adodb для библиотеки PHP.Как обрабатывать параллельные вставки в таблице mysql и извлекать правильный идентификатор вставки

Для извлечения идентификатора, при котором запись вставляется я использую эту функцию

"$db->Insert_ID()"

Я хочу знать, если есть несколько и одновременно вставляю в таблицу базы данных, будет этот метод вернуть мне правильно вставленный идентификатор для каждого запись вставлена?

Причина, по которой я прошу об этом, заключается в том, что Я использую этот последний идентификатор вставки для дальнейшей обработки других записей и последующего ввода в соответствующие таблицы.

Этот подход достаточно безопасный или я что-то упускаю.

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

Благодаря

ответ

10

Да, это безопасно для взаимопонимания. Это потому, что LAST_INSERT_ID() это за соединение, как описано here:

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

+0

спасибо Y. Шохи –

+0

Вы радушны. –

+0

, когда вы говорите клиент, я считаю, что вы имеете в виду разные запросы ips, а как насчет того, является ли клиент только локальным хостом, и вы используете несколько сценариев одновременно, и вам нужен точный последний идентификатор вставки? – Ajibola

1

в $ db-> insert_id() вернет вам последний вставить идентификатор только так, если вы вставляете много записей и хотите получить идентификатор каждой последней вставленной строки, то это будет работать успешно.

+0

благодарит Sarfraz :) –

1

Я хочу знать, есть ли несколько множественных и одновременных вставок в таблицу базы данных, будет ли этот метод возвращать мне правильный вставленный идентификатор для каждой вставленной записи?

Он вернет только самый последний вставленный идентификатор.
Чтобы получить идентификаторы для нескольких вставок, вам нужно будет позвонить INSERT_ID() после выполнения каждого утверждения. IE:

INSERT INTO TABLE .... 
INSERT_ID() 

INSERT INTO TABLE .... 
INSERT_ID() 

... чтобы получить значение id для каждой вставки. Если вы побежали:

INSERT INTO TABLE .... 
INSERT INTO TABLE .... 
INSERT_ID() 

... вернет только идентификатор для последней инструкции вставки.

Этот подход достаточно безопасный или я чего-то не хватает.

Это безопаснее, чем использование SELECT MAX(id) FROM TABLE, что может привести к возврату значения, добавленного кем-то другим, в том числе в отношении уровней изоляции.

+0

Спасибо за ваш ответ :) –

Смежные вопросы