我在MySQL数据库中有两个表:“messages”和“message_tags”。 “messages”表有一个自动增量列“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
是否有可能以一种方式将消息表中所有新生成的id返回给java,以便它们可以与原始消息匹配?像这样:
message1 => 1234
message2 => 1235
message3 => 1236
...
答案 0 :(得分:2)
你没有说明它是静态的还是动态的,但我想你可以使用这样的东西:
START TRANSACTION
INSERT INTO messages(`message`) VALUES ('message1');
@message1:=last_insert_id();
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo1');
@message2:=last_insert_id();
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagbar1');
@message3:=last_insert_id();
INSERT INTO messages(`message`) VALUES ('message2');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo1');
@message4:=last_insert_id();
INSERT INTO messages(`message`) VALUES ('message3');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo2');
@message5:=last_insert_id();
...
COMMIT
如果你做
select @message1;
结果将是1234,所以你有
@message1 => 1234
@message2 => 1235
@message3 => 1236
...
但您必须手动指定SQL变量,至少要创建一个过程或一个函数。