【问题标题】:MySQL INSERT SELECT statement throws Error 1062: Duplicate entry '' for key 2MySQL INSERT SELECT 语句抛出错误 1062: Duplicate entry '' for key 2
【发布时间】:2012-02-18 22:16:19
【问题描述】:

基本上,我有一个名为 document 的表,其中包含一个名为“host”的列。我创建了另一个名为“rev_host”的列,我想要的只是存储从“host”到“rev_host”的反转字符串。例如,如果“host”值为“www.cmu.edu”,我想将“ude.umc.www”保存到“rev_host”。然后我使用一个语句

INSERT INTO document (rev_host) SELECT REVERSE(host) from document;

这个语句抛出1062错误:

ERROR 1062 (23000): Duplicate entry '' for key 2

这句话有什么问题?如果我不能以这种方式插入。执行此插入的正确方法是什么?

【问题讨论】:

  • 出于好奇,是否有什么特别禁止您使用基于原始 'www.cmu.edu' 的反转字符串而不是使用不同的表?似乎如果转换总是那么一致(REVERSE),您可以通过在需要时执行 REVERSE(选择等)来节省额外的存储和插入。这将遵循“不要存储您可以计算的内容”的做法

标签: mysql select insert reverse


【解决方案1】:

您的查询在表中插入了一大堆新行,从而引入了重复的键。如果您只想更新一列并保留以前的条目,请改用UPDATE

UPDATE document SET rev_host=REVERSE(host);

【讨论】:

  • 感谢您的回答。实际上我快到了,我正在使用以下语句: UPDATE document SET rev_host=(SELECT REVERSE(host) FROM document);但出现“语法错误”错误。你的回答真的有效!
猜你喜欢
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
  • 2018-12-01
  • 2021-10-07
  • 2010-12-15
  • 2016-07-05
相关资源
最近更新 更多