【问题标题】:MySQL how to avoid duplicate rowMySQL如何避免重复行
【发布时间】:2016-05-17 05:32:54
【问题描述】:

我的 MySQL 表有点问题。

这是我的数据库表的外观:

如何避免重复行,如果列 'doc' 和 'date' 具有相同的值,我想在添加新插入时替换它们?

如果有人帮助我,我将不胜感激。提前致谢。

【问题讨论】:

  • 你是什么意思“只是替换它们”?
  • 如果列 docdate 具有相同的值,您不需要做任何事情。该表中只有 3 列,唯一的另一个是 id
  • @RiggsFolly 我在帖子中添加了新图片。我希望这能解决我的问题。

标签: php mysql sql insert duplicates


【解决方案1】:

为文档和日期列添加唯一索引,然后在重复更新时使用

INSERT INTO mytable (id, doc, date)
values ('id','doc','date')
on duplicate key update date = 'date' 

或任何你需要的。您可以指定多个列,例如...

on duplicate key update date = 'date, doc = 'doc', etc...

编辑

如果 doc 和 date 不是键,并且您不希望在它们上建立索引,我认为唯一的方法是首先提取查询以查看是否存在 doc 和 date 都等于您的新 doc 和 date 值的行.如果行存在,更新它 - 如果它不存在,插入新的。

【讨论】:

  • 根本不是他想要的if column 'doc' AND 'date' have same values他们不是钥匙
  • 我想要 'doc': 528 和 'date': 30/09/2015 但不能添加 'doc': 528 和 'date': 30/09/2015 (有差异。id),但我可以添加 'doc': 529 和 'date': 30/09/2015 或 'doc': 528 和 'date': 29/09/2015。
【解决方案2】:

如果您想要插入到表中,并且该表使用 AI 作为其主键并且您没有明确地创建一个,那么您将始终创建一个副本。

“ON DUPLICATE KEY”函数不能扩展为“ON DUPLICATE FIELD”函数。

您唯一真正的解决方案是更改代码,正如 Phil 所说。执行以下操作:

SELECT id
FROM mytable
WHERE doc = '$doc' AND
date = '$date'

如果有任何结果,您可以使用显式 id 进行插入,也可以忽略它。

INSERT INTO mytable (id, doc, date)
values ('$id','$doc','$date')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多