【问题标题】:How to avoid duplicates without using unique keys in mysql如何在不使用 mysql 中的唯一键的情况下避免重复
【发布时间】:2019-03-18 06:11:26
【问题描述】:

这是一个用例,其中唯一键约束可能因帐户而异。所以不能使用主键/唯一键约束来实现重复限制。

假设我们有表 T1,其中包含 C1、C2、C3、C4、C5 列,并且我们有两个帐户 A1 和 A2。 A1 和 A2 的数据进入同一个表 T1。但是为了获得账户 A1 的唯一记录,我们考虑 C1 和 C2 列,而对于账户 A2,我们考虑 C3 和 C3。同样,我们可以有许多帐户,每个帐户都有不同的列集来识别唯一记录。

所以我们在 Java 代码中进行了检查。但是,如果有 2 个重复的并发请求,则 2 个 Java 线程会看到该成员不存在,并且它们都插入了导致重复的记录。如何防止此类重复插入?

我可以通过使用行级锁或 Hibernate 的乐观并发来防止更新。我可以考虑使用表级锁来防止此类插入,但会限制应用程序性能,因为它还会阻止更新。

【问题讨论】:

  • 要么修复你的模型,要么不要使用 sql。 :-(
  • 不同的列不能有不同的主键。正如@Strawberry 所建议的,您需要修复您的模型。您可以有一个帐户 ID 列和只有一组列(例如 C1 和 C2)。使用帐户 ID 和列创建复合键(可能是 accid & col1 或 acc id & col2 或 accid, Col1, Col2

标签: java mysql hibernate


【解决方案1】:

用主键代替唯一键

【讨论】:

    猜你喜欢
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2013-04-10
    • 1970-01-01
    相关资源
    最近更新 更多