У меня есть две таблицы в базе данных MySQL: «сообщения» и «message_tags». В таблице «сообщения» имеется столбец автоматического ввода «message_id». В Java я хочу добавить пакет сообщений в базу данных с помощью пакета java.sql. Я хочу сделать это в одной транзакции для сохранения запросов.Получить все вставки ids в транзакции
Мой SQL код должен выглядеть следующим образом:
START TRANSACTION
INSERT INTO messages(`message`) VALUES ('message1');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo1');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagbar1');
INSERT INTO messages(`message`) VALUES ('message2');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo1');
INSERT INTO messages(`message`) VALUES ('message3');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo2');
...
COMMIT
Можно ли получить все вновь созданные идентификаторы из таблицы сообщений обратно в Java таким образом, что они могут быть сопоставлены с первоначальными сообщениями? Что-то вроде этого:
message1 => 1234
message2 => 1235
message3 => 1236
...
Сделки не сохраняют запросы. Единственное, что делает транзакция, это позволить вам откатиться, если не удастся. Вы все равно должны выполнять каждый запрос. Ответ jcho360 прав, но он не сохраняет запросы. Вы также можете запустить запрос last_insert_id из Java, чтобы избежать использования пользовательских переменных. Вы можете объединить все значения в один большой INSERT, но после этого вы не сможете получить last_insert_id после каждого. –
Спасибо за ваш комментарий, моя формулировка была неправильной. База данных удалена, и я хочу сохранить соединения, отправив сообщения в виде пакета в транзакции. – Thomas
О, вам все равно не нужна транзакция, чтобы выполнить их, если вам не нужны транзакции. –