首页 > 解决方案 > 如何在不使用 mysql 中的唯一键的情况下避免重复

问题描述

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

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

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

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

标签: javamysqlhibernate

解决方案


用主键代替唯一键


推荐阅读