我正在读取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?
答案 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限制。建议修改您的方法: