Intereting Posts

LAST_INSERT_ID (), как он работает в среде с несколькими пользователями

сначала проверьте этот вопрос:
Вставка автоматически сгенерированного индекса из таблицы в другую таблицу
Я понял, что эта функция «LAST_INSERT_ID ()» делает требуемую
вопрос в том, что: я использую это в php-скрипте, что, если какой-то пользователь вставил данные в «table1» и перед тем, как вставить «id» в «table2», другой пользователь вставил данные в «table1» … затем, id "будет ли функция получать для первого пользователя, его идентификатор или идентификатор второго пользователя" последний "?
Я хочу получить «id», который сам пользователь «первый пользователь» вставил, поэтому, если он не достиг этого, как это сделать?

Solutions Collecting From Web of "LAST_INSERT_ID (), как он работает в среде с несколькими пользователями"

LAST_INSERT_ID () дает вам последний автогенерированный идентификатор соединения, в котором вы его выполняете, он не возвращает последний идентификатор вставки, глобально созданный сервером MySQL.

НИКОГДА никогда не используйте lastInsertId () с последовательностями PostgreSQL, ESPECIALLY, когда загрузка приложения / обновления приложения высока. Последовательности PostgreSQL не являются транзакционными (естественная функция дизайна, чтобы избежать исключительной блокировки, которая в противном случае создает неприемлемую производительность). Это означает, что любая параллельная транзакция, увеличивающая одну и ту же последовательность, будет отображать значение, возвращенное lastInsertId (), недействительным по отношению к последней вставке вашей транзакцией. Пример:

 Transaction 1 inserts with nextval('some_seq') yielding 100; Concurrent transaction 2 inserts with nextval('some_seq') yielding 101; Transaction 1 calls lastInsertId(), expecting 100, BUT GETS 101. 

Этот метод PDO является braindead для PostgreSQL, всегда используйте INSERT … RETURNING вместо этого. С уважением.

Источник