【问题标题】:How to check and avoid duplicate records in a MySQL database table? [duplicate]如何检查和避免 MySQL 数据库表中的重复记录? [复制]
【发布时间】:2016-02-06 02:33:11
【问题描述】:

我正在使用 Spring Boot、Maven、Hibernate 和 MySQL

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

有什么建议吗?

【问题讨论】:

    标签: java mysql spring hibernate spring-mvc


    【解决方案1】:

    修改数据库以不允许重复。这就是对表进行唯一约束的目的。

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

    【讨论】:

    • ..而且速度更快,工作量更少
    • @Gordon Linoff 这就是交易进入游戏的地方?它不应该是事务性 SQL 操作避免重复吗?我的意思是在单个事务中检查和插入。
    • @XtremeBiker 。 . .显式事务会产生大量开销。在应用层执行规则是可能的。让数据库来做会更快更简单。
    • 谢谢,太有趣了。因此建议在 DB 层检查完整性(约束或触发器)。无论如何,如果性能不是优先事项,transaction management 可能会很方便。
    • 如何在 MySQL 表中指定复合唯一约束(列,两个在我的场景中具体)?更改表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 子句指定的操作吗?
    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多