gpt4 book ai didi

java - 重复插入

转载 作者:行者123 更新时间:2023-12-02 07:41:47 25 4
gpt4 key购买 nike

在并发请求的情况下,我遇到了以下重复插入问题。

我有两个表:

create table tbl (
val varchar2(1000)
);

create table tbl2 (
val varchar2(1000)
);

仅当表 tbl 为空时,我才需要在表 tbl2 中插入一些值。因此,在我的 Java 代码中,我在隔离级别 = READ COMMITED 的事务中执行操作:

//start transaction
int result = jdbcTemplate.queryForInt("select count(*) from tbl");
if (result == 0) {
int update = jdbcTemplate.update("insert into tbl2(val) values(?)", "di" + UUID.randomUUID().toString());
}
//end transaction

这里的问题是:有人实际上可以在 if (result == 0) 和我的更新语句之间插入数据。所以我会有重复的条目。

我的示例过于简单,但我的实际情况要复杂得多,但基本思想是相同的:在插入之前我需要在 Javacode 中进行多次选择。

那么,如何避免这种情况(我对数据库端解决方案和Java端解决方案感兴趣)?

附注数据库是Oracle。

最佳答案

我认为处理这种情况的最佳方法可能是在数据库级别。您可以使用如下查询:

insert into tbl2 values(xx) where not exists (select 1 from tbl1)

所以你的查询可能会变成这样

int update = jdbcTemplate.update("insert into tbl2(val) values(?) where not exists (select 1 from tbl1)", "di" + UUID.randomUUID().toString());

关于java - 重复插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11479300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com