У меня есть две таблицы базы данных MySQL, предназначенные для хранения данных для заказов на эскпаузы. Они построены как таковой (очень упрощенный вариант):Сохранять идентификатор автоинкремента внутри транзакции MySQL
CREATE TABLE `orders` (
`id` int(11) NOT NULL auto_increment
PRIMARY KEY (`id`)
);
CREATE TABLE `order_items` (
`id` int(11) NOT NULL auto_increment,
`orderID` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
Отношения между ними состоит в том, что orders.id соответствует order_items.orderID.
Я использую транзакцию для размещения нового заказа, однако у меня есть проблема с сохранением вышеуказанного отношения. Чтобы получить новый идентификатор заказа. Я должен зафиксировать запрос INSERT заказов, получить идентификатор с автоинкрементами и затем начать другую транзакцию для элементов заказа. Который в значительной степени поражает смысл использования транзакций.
я мог вставить новый заказ в таблице заказов, а затем попробовать что-то вроде
INSERT INTO order_items(orderID) VALUES(LAST_INSERT_ID())
который я предполагаю, будет работать. Однако после ввода элемента первого заказа LAST_INSERT_ID()
прекратит возвращать идентификатор заказа и вместо этого возвращает идентификатор элемента заказа, что делает невозможным использование этого запроса для вставки другого элемента заказа.
Есть ли способ заставить все это работать в рамках одной транзакции, или я должен отказаться и использовать процедуру вместо этого?
это неверно: «Я должен зафиксировать запрос INSERT заказов, получить идентификатор с автоинкрементами, а затем начать другую транзакцию для элементов заказа». Я вижу это все время здесь, в stackoverflow. где вы это узнали? – longneck
@longneck Я думаю, вы неправильно поняли. Это я объяснял тот процесс, который я не хочу следовать. –