0

我在 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
...
4

1 回答 1

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 变量,至少您创建一个过程或一个函数。

于 2012-05-25T13:43:18.733 回答