【发布时间】:2013-08-12 02:19:27
【问题描述】:
我有一个数据库服务器。
应用程序的逻辑是它会查询是否存在特定的行,如果不存在,它将插入一个新行。查询在 Java 和容器管理事务中完成。
因此,如果有 2 个应用程序服务器运行相同的代码,那么两个服务器是否可以检查该行不存在,并且都插入该行。 (由于另一个唯一的自动编号主键列,插入将成功)
我们如何确保该数据只有一个且只有一个唯一行?
斯奈特
【问题讨论】:
-
我喜欢处理这种事情的方式是在您希望唯一的列(或列组)上创建一个 UNIQUE 约束。不要检查是否存在,只是总是尝试插入具有指定数据的行,并在您的业务逻辑中捕获任何异常(由数据库引擎抛出)。这是处理此类竞争条件的唯一真正方法