【发布时间】: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