Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在MariaDB中批量插入,并在重复密钥更新时插入_Java_Mysql_Sql_Jdbc_Mariadb - Fatal编程技术网

Java 在MariaDB中批量插入,并在重复密钥更新时插入

Java 在MariaDB中批量插入,并在重复密钥更新时插入,java,mysql,sql,jdbc,mariadb,Java,Mysql,Sql,Jdbc,Mariadb,我有下表: id - int(10) primary key contact - int(10) list - int(10) 在联系人和列表上具有唯一索引。当我通过100条记录同时运行以下批量查询时: INSERT INTO cl(list, contact) VALUES (?, ?) ON DUPLICATE KEY UPDATE cl.id = cl.id 在高压下,其故障率约为20%,错误如下: java.sql.SQLSyntaxErrorException: You have

我有下表:

id - int(10) primary key
contact - int(10)
list - int(10)
在联系人和列表上具有唯一索引。当我通过100条记录同时运行以下批量查询时:

INSERT INTO cl(list, contact) VALUES (?, ?) ON DUPLICATE KEY UPDATE cl.id = cl.id
在高压下,其故障率约为20%,错误如下:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ON DUPLICATE KEY UPDATE cl.id = cl.id' at line 1
80%的查询运行正常。当我使用相同的参数重新运行失败的查询时,再次失败20%

为什么某些查询在第二次执行时失败,然后不产生错误?

将查询更改为

INSERT IGNORE INTO cl(list, contact) VALUES (?, ?)

解决了这个问题。虽然还不清楚为什么mysql会抛出java.sql.SQLSyntaxErrorException而不是更明确的东西。

我认为您的sql没有意义(不是粗鲁的)…我认为您应该做一些事情,例如,如果您想更新列表,那么:
插入cl(列表,联系人)值(?,)在重复密钥更新列表=?
…上,或者如果要更新联系人,则应尝试:
在重复密钥更新联系人=?
上插入cl(列表,联系人)值(?),或者如果要同时更新这两个值:
在重复密钥更新列表=?,contact=?
…想法是不要更改表中已有的记录。在任何情况下,失败都不是因为存在重复项:当查询运行时,表中没有具有相同键的记录。但我仍然不理解…
on key duplicate update
主要用于将id作为参数传递时,例如:
插入cl(id,list,contact)值(?,?)在重复密钥更新cl.id=cl.id
…时,您没有传递id,如果id也是自动递增的,然后,您永远不应该访问on dup密钥更新部分…..由于联系人和列表上的唯一索引,当命中列表和联系人的唯一组合时,将达到on dup。Mmmmm…仍然不清楚…..顺便说一句,在文档中,此短语看起来很有趣:
不建议在具有多个唯一索引的表上使用此语句索引。
。。。。