java - 如何在不使用 mysql 中的唯一键的情况下避免重复
问题描述
这是一个用例,其中唯一键约束可能因帐户而异。所以不能使用主键/唯一键约束来实现重复限制。
假设我们有表 T1,其中包含 C1、C2、C3、C4、C5 列,并且我们有两个帐户 A1 和 A2。A1 和 A2 的数据进入同一个表 T1。但是为了获得账户 A1 的唯一记录,我们考虑 C1 和 C2 列,对于账户 A2,我们考虑 C3 和 C3。同样,我们可以有许多帐户,每个帐户都有不同的列集来识别唯一记录。
所以我们在 Java 代码中进行了检查。但是,如果有 2 个重复的并发请求,则 2 个 Java 线程会看到该成员不存在,并且它们都插入了导致重复的记录。如何防止此类重复插入?
我可以通过使用行级锁或 Hibernate 的乐观并发来防止更新。我可以考虑使用表级锁来防止此类插入,但会限制应用程序性能,因为它也会阻止更新。
解决方案
用主键代替唯一键
推荐阅读
- swift - Swift 4. 在继续执行之前等待 HealthKit HKQuery 的异步结果
- c# - C# GridView 行添加到错误的位置?
- powershell - 使用 powershell 登录 Auth0 (OWIN) 锁屏
- python - Pandas 正则表达式返回括号中的值
- emacs - 启动 emacs 时覆盖 .emacs 配置
- mongodb - 重命名 $project 聚合管道上的字段
- sql-server - Best way to incorporate a query inside of the PIVOT IN list?
- php - PHP 7.2: HTTP Form Post,用反斜杠转义单引号。Magic Quotes 在 5.x 中被删除
- java - Preventing Docker Container CPU Resets?
- javascript - Immer 不支持在数组上设置非数字属性