mariadb 没有主键的Jooq更新表记录意外插入新记录

idfiyjo8  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(76)

我有一个名为result的表,它没有主键(无法更改)。我想使用Jooq更新所有满足特定条件的记录。下面的代码不像我预期的那样工作。它插入新的记录,而不是更新现有的,我不明白。

public Mono<Result> update(Result result, String name) {
        return Mono.from(ctx.update(RESULT)
                        .set(RESULT.STATUS, result.getStatus())
                        .where(RESULT.NAME.eq(name))
                        .returning()
                )
                .map(r -> r.into(Result.class));
50few1ms

50few1ms1#

jOOQ 3.18在MariaDB 10.5中引入了UPDATE .. RETURNING的模拟,它本身不支持以下语法:

总之,这种说法:

UPDATE t
SET a = b
WHERE p
ORDER BY o
LIMIT l
RETURNING x;

可以模拟如下:

INSERT INTO t
SELECT * FROM t WHERE p ORDER BY o LIMIT l
ON DUPLICATE KEY UPDATE SET a = b
RETURNING x;

但是很明显,这假设存在一个可以被ON DUPLICATE KEY子句匹配的主键(或唯一键)。换句话说,jOOQ可以模拟UPDATE .. RETURNING * 只有 * 如果你有一些独特的约束,否则。
是否应以错误的形式向用户说明这一要求是有争议的:

相关问题