【发布时间】:2019-12-19 15:08:37
【问题描述】:
我有一个简单的程序正在修改一个数据库,它也可以由不同的用户同时运行。
在程序中,我有一些顺序操作读取/更新/插入数据库,这些操作相互依赖。
例如:
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 列上强制唯一性,这将阻止重复插入。
我要做的是确保我们可以在不锁定整个表的情况下避免这种情况?所以我们可以保证在执行选择查询之前,我们可以知道行上不会有插入/更新/读取(可能存在也可能不存在)。之后我们可以释放该行的锁。
【问题讨论】:
标签: java sql sql-server jdbc