Используя MYSQL LAST_INSERT_ID () для извлечения идентификатора вставленной строки?

У меня есть таблица, в которой есть столбец с AUTO INCREMENT . Я должен получить значение этого столбца при вставке новой строки (мне нужно значение новой строки). Я много читал об этом и нашел разные решения, один - использовать SELECT LAST_INSERT_ID() . Я много слышал об этом. Могу ли я или не использовать это? Я беспокоюсь, что другое соединение может вставить новую строку, прежде чем я смогу вызвать SELECT LAST_INSERT_ID() и, следовательно, получить неверный идентификатор.

Подводя итог, можно ли использовать SELECT LAST_INSERT_ID() ? Если нет, как я могу безопасно восстановить последний вставленный идентификатор?

5
добавлено отредактировано
Просмотры: 2
что такое автоматический пул соединений? Я использую PHP с mysqli. Выяснилось, что я могу просто вызвать mysqli-> last_id.
добавлено автор AlexanderNajafi, источник
Последний идентификатор вставки должен возвращать последний идентификатор, сгенерированный для текущего соединения. Не нужно беспокоиться о других подключениях.
добавлено автор Jon Stirling, источник
Если у вас есть автоматическое объединение пулов, запуск другого вызова может выполняться в другом соединении. Если у вас этого нет, вы в безопасности.
добавлено автор Erik Ekman, источник
Обратите внимание: dev.mysql.com /doc/refman/5.0/en/…
добавлено автор Bhavik Shah, источник

5 ответы

I dont think that you need to worry about the case you are mentioning here.

From Mysql documentation:
The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions.

For detailed info, refer this

Хотя, я бы хотел прочитать от других, если у них другое мнение.

12
добавлено

Идентификатор генерируется для каждого соединения, поэтому у вас не должно быть никаких проблем! Это сообщение более подробно.

0
добавлено

Если для вас важно иметь последний идентификатор таблицы, вы можете заблокировать таблицу для записи, а затем сделать SELECT MAX (id) FROM table_name , а затем разблокировать таблицу.

0
добавлено

If you're using PDO, use PDO::lastInsertId.

and if you are using mysql, use mysqli::$insert_id.

and yes it is safe to use AI This is the post which says this : http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

and instead of using select statement directly, try to use preparedStatement.

Also you can use the Lock

0
добавлено

Да, согласно официальной документации, это безопасно:

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

Taken From: MYSQL Documentation 12.13. Information Functions

0
добавлено