美文网首页金石路545号水吧
java同时插入mysql数据库多对多关系的两张表报错解决方法

java同时插入mysql数据库多对多关系的两张表报错解决方法

作者: 丁忠康 | 来源:发表于2017-12-02 09:14 被阅读66次

在做商城项目时,涉及到订单表orders和订单项表orderitem的数据同时插入到数据库,这两张表的关系为多对多,通过事物提交时会产生如下错误:

java.sql.SQLException: Duplicate entry 'D4E7B8F045EE4E8C8750A8EF64326A30' for key 'PRIMARY' Query: insert into orders values(?,?,?,?,?,?,?,?) Parameters: [D4E7B8F045EE4E8C8750A8EF64326A30, Thu Nov 30 20:19:29 CST 2017, 11686.0, 0, null, null, null, f55b7d3a352a4f0782c910b2c70f1ea4]

这个错误的意思是    java插入重复录入的4326a30 '关键'主'查询,也就是主键重复插入,网上的解决方法有以下几种:

一:在my.cnf的[mysqld]片段中加入设置innodb_autoinc_lock_mode=0

同一时候注意调大jdbc的活跃链接数,如设置 jdbc.maxActive=300,由于设置innodb_autoinc_lock_mode=0可能导致链接过多。

注意,这样的方式仅仅须要在并发性能测试时设置,由于这样的方式在插入记录时需进行全表锁定,性能较差,平时生产环境中仅仅需使用默认的设置innodb_autoinc_lock_mode=1就可以,mysql的官方文档有说明:

1、innodb_autoinc_lock_mode = 0 (“traditional” lock mode)

这样的方式就和mysql5.1.22曾经一样,这样的方式的特点就是“表级锁定”,并发性较差

2、innodb_autoinc_lock_mode = 1 (“consecutive” lock mode)

这样的方式是新版本号中的默认方式,推荐使用,并发性相对较高,特点是“consecutive”,即保证同一条insert语句中新插入的auto_increment id都是连续的。

二:清空表中的数据在插入

以上这两种方法试了没有成功,

我的解决方法:

项目中的mysql 用的jar包

到mysql官网上下载最新的jar包并替换项目原有的jar包

然后进行测试,成功插入数据到订单表orders和订单项表orderitem中

相关文章

网友评论

    本文标题:java同时插入mysql数据库多对多关系的两张表报错解决方法

    本文链接:https://www.haomeiwen.com/subject/wyogbxtx.html