尝试增加日期字段时,MySQL会出现重复输入错误?

时间:2011-08-06 16:49:20

标签: mysql duplicates increment

我正在读取XML文件中的数据。由于源上的错误,它是一天,所以在加载到数据库后,我使用此SQL语句来增加日期。

UPDATE 2011_electricity SET DATE = DATE_ADD( DATE, INTERVAL 1 DAY )

上周它工作正常,但现在我收到错误:

MySQL said: 

#1062 - Duplicate entry '2011-07-20' for key 1 

我在数据字段上有一个主键。这就是数据库的外观:

                date        energy  daynum
        2011-06-29  0.05    4197
        2011-07-19  0.20    4219
        2011-07-20  17.07   4220
        2011-07-21  11.56   4221
        2011-07-22  18.18   4222
        2011-07-23  24.92   4223
        2011-07-24  10.56   4224
        2011-07-25  12.68   4225
        2011-07-26  10.06   4226
        2011-07-27  19.72   4227
        2011-07-28  19.02   4228
        2011-07-29  17.92   4229
        2011-07-30  14.49   4230
        2011-07-31  10.84   4231
        2011-08-01  13.38   4232
        2011-08-02  14.86   4233

我在那里看不到任何重复,所以不明白错误,有没有更好的方法来执行mysql代码将日增加1?

2 个答案:

答案 0 :(得分:2)

这是关于MySQL UPDATE如何工作的问题,如p.cambell解释的那样逐行。绕过这个问题的另一种方法是明确地告诉引擎如何订购更新(另一个MySQL怪癖):

UPDATE 2011_electricity 
SET DATE = DATE_ADD( DATE, INTERVAL 1 DAY )
ORDER BY DATE DESC 

经验法则:如果您想增加PK(或其他唯一键),请按降序排序。如果你想减少PK,请按升序排序。

答案 1 :(得分:1)

听起来你正试图更新桌面上的PK值。旁白:建议为此表寻找另一个PK。这是正在发生的事情。

逐行:

  • 2011-06-29的PK更新为2011-06-30。这成功,因为没有其他行具有该PK值。
  • 2011-07-19的PK更新为2011-07-20。这个失败,因为已经有另一行具有该PK值。预先存在的行的PK尚未增加。我们现在违反了PK限制。

建议修改您的方法:

  • 删除表格中的所有新数据,然后像现在一样从源代码重新加载。
  • 如果删除不是一个选项,
  • 利用临时/临时表。您可能希望根据需要有选择地换出行。