gpt4 book ai didi

java - 如何在竞争条件下将主键值插入表中?

转载 作者:行者123 更新时间:2023-11-29 12:31:25 25 4
gpt4 key购买 nike

我们有一个代码可以将一个新值插入到作为主键的表列中。首先我们进行选择,如果该值不存在,那么我们进行插入。

query = "SELECT AValue from ATableCache WHERE AValue=" + avalue;
ResultSet rs = stmt.executeQuery(query);
if (!rs.next())
{
query = "INSERT INTO ATableCache (AValue) VALUES ('" + avalue + "')";
stmt.executeUpdate(query);
}

在竞争条件下,此算法可能会在插入一个刚刚由另一个线程插入的值时导致 SQL 错误。其中一个选项是同步,但这会减慢执行速度。请注意,插入很少发生。有没有更高效的算法?

最佳答案

我会让数据库生成 key 并确保事务是可序列化的。您需要正确设置数据库连接的隔离级别。

根据这个答案,使用 PostgreSQL 可能是可行的,但是保证适用于所有 JDBC 驱动程序的通用解决方案已经避开了 Spring:

Is there anyway to get the generated keys when using Spring JDBC batchUpdate?

关于java - 如何在竞争条件下将主键值插入表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19302161/

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