【问题标题】:MySQL #1062 while there's no such data in tableMySQL #1062 而表中没有这样的数据
【发布时间】:2013-05-13 15:32:15
【问题描述】:

----exception----

(1062, "Duplicate entry '1711076-314274483' for key 'uk_thread_mail'")

这是我在日志中打印的异常。

密钥是UNIQUE KEY uk_thread_mail (thread_id, mail_id)

日志似乎告诉我,我已经将元组值 (thread_id, mail_id) 设为 (1711076, 314274483),但是当我检查表时,我找不到任何与 thread_id=1711076 和 mail_id=314274483 匹配的行。

我真的很想知道为什么会这样。


我的代码如下:

for r, s in rs:
    try:
        store.execute("insert into table_x (thread_id, mail_id) values (%s, %s)", (r, s))
    except Exception, e:
        print e
        store.rollback()
    store.commit()

rs 中的行永远不能重复,因为 mail_id 来自另一个表的主键。

【问题讨论】:

  • 您是否同时进行多个插入?
  • 我在想也许他LOAD DATA INFILE ?并且该组合在文件中出现了两次
  • 我在一个循环中插入了数据,比如for r in rs: store.execute("insert into table_x (x, y) values (%s, %s)", (r[0] , r[1])); store.commit();但我不确定交易是在哪里同时提交的。
  • 你说你用这些键找不到行。您是在检查数据源 (rs) 还是目标表 (table_x)?如果您正在查看 table_x,则回滚可能会阻止您查看包含该数据的行。
  • 我签入 table_x used select * from table_x where thread_id= and mail_id= 但返回空集。从异常中我们可以看到表中出现了重复的行,这意味着如果我在表中检查我可以找到匹配的一行,则第二行是重复的。但是我在表格中没有,第二行仍然是重复的,这就是我感到困惑的原因。

标签: mysql duplicates mysql-error-1062


【解决方案1】:

这听起来不太可能(除非您正在执行 cmets 中提到的重复插入)。您可以尝试删除键或重建索引。

【讨论】:

    【解决方案2】:

    我最近遇到了类似的问题。

    最终这是由于将 bigint(在源中)转换为 int(在目标中)。并导致插入“重复条目”。

    如果您有类似的选角问题,那可能是您的问题。

    【讨论】:

      猜你喜欢
      • 2018-10-24
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2014-01-28
      相关资源
      最近更新 更多