gpt4 book ai didi

java - 基于选择结果的基本锁定

转载 作者:行者123 更新时间:2023-12-02 09:11:06 27 4
gpt4 key购买 nike

我有一个正在修改数据库的简单程序,该程序也可以由不同的用户同时运行。

在程序中,我有一些相互依赖的顺序操作来读取/更新/插入数据库。

例如:

String selectQuery = "select order.[total] from order where id=?";
selectQuery.setString(1, "15679");

ResultSet queryResults = selectQuery.executeQuery();

if(queryResults.next() == false){

//execute insert into the order table
String insertQuery = "insert into order (id, total) values (?,?)";
.......

}

在上面的示例中,不能保证两个程序不会同时尝试插入订单,因为它们都可能执行选择,获取空结果集,然后尝试插入。

我知道在这个例子中它有点不切实际,因为我们可以在 id 列上强制唯一性,这将阻止插入重复项。

我想做的是确保我们可以在不锁定整个表的情况下避免这种情况?因此我们可以保证在执行 select 查询之前我们可以知道该行上不会有插入/更新/读取(可能存在也可能不存在)。之后我们就可以释放该行上的锁。

最佳答案

嗯,您似乎了解竞争条件以及为什么您不想在应用程序中进行检查。

因此,请确保id订单中是唯一的:

alter table orders add constraint unq_orders_id unique (id);

您可以尝试任意数量的并发插入。除了一个之外,所有其他都会失败,因为数据库正在确保关系完整性。

关于java - 基于选择结果的基本锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59412389/

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