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

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

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

5
что такое автоматический пул соединений? Я использую 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
добавлено
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp