gpt4 book ai didi

java - 获取事务中的所有插入 ID

转载 作者:行者123 更新时间:2023-11-29 08:52:44 26 4
gpt4 key购买 nike

我的 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
...

最佳答案

你没有指定它是静态的还是动态的,但我想你可以使用这样的东西:

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 变量。

关于java - 获取事务中的所有插入 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10755334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com