数据库逻辑中的竞争条件

时间:2013-08-10 04:53:48

标签: database race-condition

我有一个数据库服务器。

应用程序逻辑是它将查询是否存在特定行,如果不存在,它将插入新行。查询在Java和容器管理的事务中完成。

因此,如果2个应用程序服务器运行相同的代码,两个服务器是否可能检查该行不存在,并且都插入该行。 (由于另一个唯一的自动编号主键列,插入将成功)

我们如何确保该数据只有一个且唯一的唯一行?

sknaht

1 个答案:

答案 0 :(得分:1)

  

由于另一个唯一的自动编号主键列

,插入将成功

大多数DBMS提供了一种创建“唯一键”或“唯一索引”的方法,即使它不是主键,也可以强制执行给定列(或列集)的唯一性。然后第二个插入将失败,就像它违反了主键约束一样。

您还没有说明您使用的DBMS,但大多数(全部?)常见的DBMS都具有此功能;例如,PostgreSQL,MySQL,SQL Server和Oracle都可以。