我在MySQL數據庫中有兩個表:「messages」和「message_tags」。 「消息」表具有自動增量列「message_id」。在Java中,我想使用java.sql包將一批消息添加到數據庫。我想在一個事務中執行此操作以保存查詢。在事務中獲取所有插入標識
我的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所有新生成的ID的方式,他們可以匹配到原來的消息?事情是這樣的:
message1 => 1234
message2 => 1235
message3 => 1236
...
交易不保存查詢。交易所做的唯一事情是允許您在發生失敗時回滾。您仍然必須執行每個查詢。 jcho360的答案是正確的,但不保存查詢。您也可以運行Java中的last_insert_id查詢以避免使用用戶變量。你可以將所有的值組合成一個大的INSERT,但是你不能在每個之後得到last_insert_id。 –
謝謝您的評論,我的措辭是錯誤的。數據庫是遠程的,我想通過在事務中將批量發送消息來保存連接。 – Thomas
哦,你仍然不需要交易批量這些,除非你確實需要交易。 –