gpt4 book ai didi

mysql last_insert_id 不返回主键的 nextval

转载 作者:行者123 更新时间:2023-11-30 01:03:20 24 4
gpt4 key购买 nike

我正在使用 spring jdbctemplate 将行插入 mysql 数据库,在批量插入 mysql 数据库时遇到问题。问题是,插入第二行时,我的主键出现重复键冲突。我已将 USER_KEY 放入批量更新方法中,但在插入第二行时出现异常键“PRIMARY”的重复条目“1”

我的方法没有注释@Transactional

注意:-我需要通过代码生成主键并将其用于更新/删除操作,因此不依赖自动增量。另外,jdbctemplate 批量插入不会返回生成的 key 。

这是我的代码

    private static final String USER_KEY = "SELECT LAST_INSERT_ID() FROM USER";


jd.batchUpdate(INSERT_QUERY,
new BatchPreparedStatementSetter() {

@Override
public void setValues(PreparedStatement ps, int count)
throws SQLException {
Long userId= jd.queryForObject(
USER_KEY, Long.class);
UserDO Userdo = userlst
.get(count);
ps.setLong(1, userId+1);
ps.setString(2, Userdo .getFirstName());
ps.setString(3, Userdo .getLastName());
ps.setString(4, Userdo .getMobile());
ps.setString(5, Userdo .getEmail());
ps.setInt(6, 0);
}

@Override
public int getBatchSize() {
return UserdoLst.size();
}
});

感谢您的宝贵回答。谢谢

最佳答案

您在哪里增加了用户 key ?你得到最后插入的 id 并使用它。或者它是由 LAT_INSERT_ID() 处理的?不应该是 ps.setLong(1, userId+1) 吗?

我以前使用过的解决这个主要关键问题的一种方法:

  1. 在数据库中创建主键表,以表名和键作为列。
  2. 编写一个存储过程,给定表名可以给出下一个可用的主键(通过增加该表中的现有键值或您需要的任何其他算法)
  3. 您还可以让该过程传递一个数字来定义所需的键数,或者您可以返回一系列键(用于一次性获取多个键)

例如对于表 MyTable1 初始键值为 0当您调用过程 getPrimaryKey(MyTable1) 时,它将返回 1 并更新主键表。

现在,在进行批量更新之前,您可以从此过程中获取 key 并将其设置在查询中。

希望这有帮助

关于mysql last_insert_id 不返回主键的 nextval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19900389/

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