唯一约束(或)如果不存在则插入更安全 - 多线程环境

时间:2017-08-03 14:30:49

标签: database

我在许多应用程序中看到他们使用唯一约束以及在某些应用程序中使用它们而不是使用唯一约束它们使用插入(如果不存在查询)

在多线程环境中,多个线程可能同时尝试插入..也可能是相同的秒或毫秒......

在这种情况下,哪个选项最好?如果不存在,则寻求唯一约束或插入。

感谢。

1 个答案:

答案 0 :(得分:3)

我更喜欢使用唯一键,因为它们是透明的,它们可以防止源上的重复。 (即你不能在你的代码中引入一个错误来添加重复数据,或者其他应用程序/个人即使直接编辑表数据也无法添加重复数据)

对于多线程应用程序,如果代码/查询写得不好,可能会导致重复,但良好的实现可以保证唯一性。 (单个事务,存在检查和插入在同一个查询中,而不是在不同的查询,无自动提交等。)

另一方面,唯一键约束的缺点是数据库开销。 (实际上不能想到任何其他缺点)

所以它是这样的:

选项1:依赖于数据库,其任务是处理数据和相关约束,其中大多数实现在性能和可靠性方面都非常好。

选项2:手动编写唯一约束检查​​代码,最终使用数据库查询进行唯一检查。并且,如果有其他写入客户端到同一个数据库表,它不会阻止重复数据。

如果主要关注的是性能,那么它取决于您的数据和数据库。你需要做一个基准测试。

否则,选择很明确。