PHP - MySQL вставка и выбор операторов - как сделать их атомарными? - PullRequest
0 голосов
/ 08 августа 2011

Я новичок в PHP, и мне было интересно, как я могу преодолеть эту, казалось бы, простую проблему:

У меня есть база данных с несколькими таблицами.Из них 1 таблица называется "order_header".Заголовок заказа имеет поле с именем "orderID", которое является primaryKey и автоматически увеличивается.OrderID используется в других таблицах базы данных (food_table, drink_table, merchant_info, customer_info и т. Д.) И является уникальным для конкретного заказа.

Теперь я вставляю данные в order_header, используя обычный оператор INSERT, и order_header генерирует новый orderID.Но теперь мне нужно извлечь только что созданный orderID и использовать его для вставки данных в другие таблицы этой базы данных.

Вопрос в том, как я могу сделать и вставку данных, и получение результирующего orderID в одном атомарном методе?Я не могу использовать запрос mySQL для получения последнего orderID, потому что, если другой поток вставил запись в orderID за это время.

В Java, я думаю, можно использовать блокировки и слово @synchronized, но как это сделать?сделать это в PHP?

1 Ответ

5 голосов
/ 08 августа 2011

Используйте mysql_insert_id сразу после запроса. Он не запускает другой запрос, чтобы найти последний идентификатор

...