【发布时间】:2016-02-06 02:33:11
【问题描述】:
我正在使用 Spring Boot、Maven、Hibernate 和 MySQL
我正在尝试确定是否更好地以编程方式找出数据库中是否已存在记录 --> 表中,或者通过修改数据库表以不允许重复来执行此操作更好。
有什么建议吗?
【问题讨论】:
标签: java mysql spring hibernate spring-mvc
我正在使用 Spring Boot、Maven、Hibernate 和 MySQL
我正在尝试确定是否更好地以编程方式找出数据库中是否已存在记录 --> 表中,或者通过修改数据库表以不允许重复来执行此操作更好。
有什么建议吗?
【问题讨论】:
标签: java mysql spring hibernate spring-mvc
修改数据库以不允许重复。这就是对表进行唯一约束的目的。
为什么这是正确的解决方案?根本原因是竞争条件。当您施加唯一约束时,数据库会进行检查。如果您尝试在应用程序层执行此操作,那么 check 和 insert 之间会有一小段时间间隔。 . .并且另一个线程可以在此期间插入相同的值。而且,您有一个副本。
【讨论】:
motedb.profile_has_friend 添加唯一unique_index(profile_id, profile_friend_id);以 id 作为主键 'id'。这些是唯一的列是表:这可以与 INSERT 语句的 ON DUPLICATE KEY 子句一起正常工作吗?也就是说,如果我尝试插入与另一行的 profile_id/profile_friend_id 值冲突的行,INSERT 会改为执行 ON DUPLICATE KEY 子句指定的操作吗?