首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql last_inset_id未返回primarykey的nextval

mysql last_inset_id未返回primarykey的nextval
EN

Stack Overflow用户
提问于 2013-11-11 14:45:56
回答 1查看 427关注 0票数 0

我正在使用spring jdbctemplate向mysql数据库中插入行,我在批量插入mysql数据库时遇到了问题。问题是,当插入第二行时,我在主键上得到了重复键冲突。我已经将USER_KEY放在批处理更新方法中,但在插入第二行时得到异常Duplicate entry '1' for key 'PRIMARY'

我的方法不是带注释的@Transactional

注意:-我需要通过代码生成主键,并将其用于更新/删除操作,因此不依赖于auto_increment。另外,jdbctemplate batch insert不会返回生成的键。

以下是我的代码

代码语言:javascript
复制
    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();
                        }
                    }); 

感谢你有价值的回答。谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-11-11 15:12:59

您在哪里增加了用户密钥?您将获得最后插入的id并使用相同的id。或者它正在被LAT_INSERT_ID()处理?它不应该是ps.setLong(1,userId+1)吗?

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

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

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

现在,在进行批量更新之前,您可以从这个过程中获取键,并在查询中设置它们。

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19900389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档