mysql(mariadb)插入重复更新随机工作

时间:2017-02-16 01:09:16

标签: java mysql mariadb insert-update jooq

我在这样的重复更新方法上插入,我使用mariadb 10.1.14:

    public <R extends Record> void batchUpsertRecord(Table<R> table, List<R> records) throws PersistenceException {
        Connection conn = ConnectionPoolManager.INSTANCE.getConnection();

            try (DSLContext dslContext = DSL.using(conn, SQLDialect.MARIADB)) {
                List<InsertQuery> insertQueryList = new ArrayList<>();
                for (R record : records) {
                    InsertQuery<R> insert = dslContext.insertQuery(table);
                    insert.addRecord(record);
                    insert.onDuplicateKeyUpdate(true);
                    insert.addValuesForUpdate(mapOfChangedValues(record));
                    insertQueryList.add(insert);
                }
                dslContext.batch(insertQueryList).execute();
                conn.commit();
            } catch (SQLException e) {
                logger.error("Failed to upsert record into table({}).", table.getName(), e);
            } finally {
                ConnectionPoolManager.INSTANCE.closeConnection(conn, logger);
            }
    }

如果记录已经存在,它会随机(很少)起作用,如果删除现有记录,则插入始终有效。

从日志中我可以看到sql每次都成功执行,但是即使记录已经存在,大多数时候受影响的行也是1(在更新情况下,它应该是2)。

似乎更新并不总是有效但插入确实有效。如果我手动执行生成的sql,它的工作正常。

对这种情况真的很困惑。在此先感谢您的帮助!

0 个答案:

没有答案