我们有一个代码,它将一个新值插入到作为主键的表列中。首先我们在做选择,如果这个值不存在,那么我们做插入。
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 错误。选项之一是同步,但这会减慢执行速度。请注意,插入很少发生。有没有更高效的算法?