Рассмотрим простую схему отношений от одного до многих. Идентификатор родительского стола указан в таблице "Дети".
В php я хочу вставить строку в таблицу, используя оператор mysql_query($query)
. Затем я получу идентификатор последней вставленной строки, используя mysql_insert_id()
. Затем я буду использовать этот id для вставки другой строки в дочернюю таблицу.
Мой вопрос заключается в том, что, поскольку может быть несколько запросов одновременно для php-страницы, что, если вышеупомянутые два оператора НЕ запускаются один за другим (т.е. например, есть две вставки, которые происходят на родительский, а затем две вставки на дочернем элементе)? Могут быть проблемы concurrency. Итак, как мы преодолеем это?
Любые идеи?
Как и в документации MySQL:
Значение mysql_insert_id() равно затрагиваются только заявлениями в рамках текущего клиентского соединения. На него не влияют заявления выпущенные другими клиентами.
Итак... нет проблем. Хотя по другим причинам я рекомендую использовать ORM (например Doctrine).
Когда вы вызываете mysql_insert_id()
, он получает последний вставленный идентификатор для этого соединения, поэтому два скрипта PHP не будут мешать друг другу.