检查PL / SQL中的重复记录

时间:2015-10-12 12:56:49

标签: oracle plsql

我正在一个项目中工作,我有成员注册部分,用于在我的表中插入用户。但我不想在我的表中插入相同的数据。为此,我有一个控制重复成员的功能。

它正在发挥作用,但还有另一个问题。如果在我的第一个事务完成之前发出了具有相同数据的另一个插入,则两个事务都所以我有两个具有相同成员数据的数据库记录。

如何编写我的函数检查它并防止同一成员被记录在数据库中

2 个答案:

答案 0 :(得分:1)

如何创建唯一约束?

答案 1 :(得分:0)

唯一正确的解决方案是在MEMBER表上创建一个唯一约束,选择一些业务键。

唯一约束在数据库内部级别运行,因此比我们自己编写的任何代码都更好。手工制作的支票不会以同样的方式进行缩放。此外,还保证约束在多用户环境中强制实现唯一性。

然而,正如您所发现的那样,我们自己编写的代码却没有。这是因为Oracle的Read Consistency意味着会话1中未提交的更改对会话2不可见;所以不管会话2做了什么检查,它都会插入重复记录,因为它的版本是它能看到的唯一版本。

此外,通过编写一次性插入语句或编写更新语句,很容易避免调用我们自己的代码。我们无法避免独特的限制:我们可以放弃或禁用它们,但这是一个有意义的决定。

简而言之,依赖于应用程序代码来强制执行唯一性或关系完整性的数据库不可避免地最终会导致数据损坏。