我们最近将数据库更新为 mariadb 10,但自从更新后,当我尝试插入数据库时出现错误,在我们的唯一键约束之一上出现重复条目错误,并且我在我的数据库中使用 ON DUPLICATE KEY SQL 脚本。
对于插入,我使用一个扩展 BatchSqlUpdate 的类,但在该类中我只设置数据源、插入 sql、批量大小 = 100 并使用 declareParameter() 设置 sql 参数。
但是,如果我们更改批量大小 1,我们找到了解决方法,代码可以完美运行,所以我认为这可能不是由我的代码引起的,但我们需要一个正确的解决方案,而我没有想法。
目前我使用:
INSERT INTO table(ldb, lid, scid, sid, valid)
VALUES(?, ?, (SELECT id FROM cserver WHERE ldb=? AND lid=?), ?, 1)
ON DUPLICATE KEY id=LAST_INSERTED_ID(id),
ldb=?, lid=? scid=(SELECT id FROM cserver WHERE ldb=? AND lid=?), sid, valid=1;
我尝试通读代码并进行调试。有些建议说这可能是由库引起的,所以我尝试更改一些依赖项,但我无法将 spring-jdbc 版本更改为 6 或更高版本,并且其他更改没有给我带来任何结果。
我想知道错误是什么。如果它是由数据库或依赖项或其他原因引起的。
这是 MariaDB 中的一个错误,最初是在 stackoverflow 上报告的,不幸的是仍未修复:-(
子选择始终返回相同的值(请参阅 MDEV-30523 中的示例),这会导致您的情况出现重复键错误。
MariaDB Bugtracker:MDEV-30523