Java 如何检查和避免MySQL数据库表中的重复记录?

Java 如何检查和避免MySQL数据库表中的重复记录?,java,mysql,spring,hibernate,spring-mvc,Java,Mysql,Spring,Hibernate,Spring Mvc,我正在使用SpringBoot、Maven、Hibernate和MySQL 我正在尝试以编程方式确定数据库-->表中是否已经存在记录,或者通过修改数据库表以不允许重复来确定是否更好 有什么建议吗?修改数据库,使其不允许重复。这就是表上唯一约束的目的 为什么这是正确的解决方案?根本原因是种族状况。当您施加唯一约束时,数据库将执行检查。如果您尝试在应用程序层执行此操作,那么在检查和插入之间会有一个小的时间间隔。另一个线程可以在此期间插入相同的值。而且,您有一个副本。。而且它更快、更少work@Gor

我正在使用SpringBoot、Maven、Hibernate和MySQL

我正在尝试以编程方式确定数据库-->表中是否已经存在记录,或者通过修改数据库表以不允许重复来确定是否更好


有什么建议吗?

修改数据库,使其不允许重复。这就是表上唯一约束的目的


为什么这是正确的解决方案?根本原因是种族状况。当您施加唯一约束时,数据库将执行检查。如果您尝试在应用程序层执行此操作,那么在检查和插入之间会有一个小的时间间隔。另一个线程可以在此期间插入相同的值。而且,您有一个副本。

。而且它更快、更少work@Gordon林诺夫那就是交易进入游戏的地方?它不应该是一个事务性SQL操作来避免重复吗?检查并插入一个事务,我的意思是。@XtremeBiker。显式事务可能会产生大量开销。可以在应用程序层强制执行规则。让数据库来做会更快更简单。谢谢,很有趣。因此,建议在DB层(约束或触发器)检查完整性。无论如何,如果性能不是优先考虑的话,这可能很方便。我如何在MySQL表中指定复合唯一约束(列,两列在我的场景中是特定的)?ALTER TABLE
motedb.profile\u有朋友
添加唯一的
UNIQUE\u索引
profile\u id
profile\u friend\u id
);以id作为主键“id”。这是表中唯一的列:这是否适用于INSERT语句的ON DUPLICATE KEY子句?也就是说,如果我试图插入与另一行的profile\u id/profile\u friend\u id值冲突的行,插入是否会执行ON DUPLICATE KEY子句指定的操作?