我有一个我不太明白的问题。我用Ruby解析一些提要,并将它们的内容保存在数据库中。我创建了一个“哈希”-column,它是每个帖子url的md5哈希。这个专栏是独一无二的,因为我不想重复发布任何内容。
它实际上工作得很好:
Mysql::Error: Duplicate entry '28edb7c2b3cd074d226fc4ae37baedd7' for key 'hash'但是脚本在这一点上停止了。我不明白这一点,我知道在PHP中使用INSERT总是很有效,所以如果有重复的条目,它会忽略它,然后继续。
有人能帮我吗?"INSERT IGNORE“会创建一个双重输入,还是会忽略错误消息并继续?
发布于 2011-06-11 19:45:32
听起来你的Ruby脚本需要一些exception handling.
发布于 2011-06-11 19:51:29
您可以重写查询,以便使用INSERT INTO
REPLACE INTO ...或
INSERT INTO ... ON DUPLICATE KEY UPDATE通过这种方式,尝试插入重复的键将更新现有记录,而不是出错。
有关详细信息,请参阅here和here。
更新:
如果INSERT IGNORE遇到重复的密钥,它不会接触您现有的数据。The documentation说:
您可以使用REPLACE而不是INSERT来覆盖旧行。REPLACE是在处理包含复制旧行的唯一键值的新行时插入IGNORE的对应物:新行用于替换旧行,而不是被丢弃。
如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告。例如,在不使用IGNORE的情况下,重复表中现有唯一索引或主键值的行将导致重复键错误,并且语句将中止。如果使用IGNORE,仍然不会插入行,但不会发出任何错误。
发布于 2011-06-13 03:16:15
在PHP中,如果MySQL返回一个错误,它通常不会终止PHP脚本。在我看来,Ruby并非如此。要么捕获异常并处理它,要么使用INSERT IGNORE,在这种情况下,MySQL返回警告而不是错误(除非被告知不要这样做)。
https://stackoverflow.com/questions/6315688
复制相似问题