Php - вставка значения автоинкремента - для родительских / дочерних таблиц - проблема параллелизма

0

Рассмотрим простую схему отношений от одного до многих. Идентификатор родительского стола указан в таблице "Дети".

В php я хочу вставить строку в таблицу, используя оператор mysql_query($query). Затем я получу идентификатор последней вставленной строки, используя mysql_insert_id(). Затем я буду использовать этот id для вставки другой строки в дочернюю таблицу.

Мой вопрос заключается в том, что, поскольку может быть несколько запросов одновременно для php-страницы, что, если вышеупомянутые два оператора НЕ запускаются один за другим (т.е. например, есть две вставки, которые происходят на родительский, а затем две вставки на дочернем элементе)? Могут быть проблемы concurrency. Итак, как мы преодолеем это?

Любые идеи?

  • 0
    Я думаю, что вы должны быть в порядке, если вы используете mysql_insert_id ()
  • 0
    Как ты можешь быть уверен? Есть ссылки?
Теги:
concurrency
lookup-tables

2 ответа

2
Лучший ответ

Как и в документации MySQL:

Значение mysql_insert_id() равно затрагиваются только заявлениями в рамках текущего клиентского соединения. На него не влияют заявления выпущенные другими клиентами.

Итак... нет проблем. Хотя по другим причинам я рекомендую использовать ORM (например Doctrine).

  • 0
    dev.mysql.com/doc/refman/5.0/es/mysql-insert-id.html
  • 0
    То есть вы имеете в виду, что все ORM (такие как Hibernate, Entity Framework (.net)) самостоятельно решают эту проблему?
Показать ещё 1 комментарий
3

Когда вы вызываете mysql_insert_id(), он получает последний вставленный идентификатор для этого соединения, поэтому два скрипта PHP не будут мешать друг другу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню