mysql REPLACE INTO只有一些字段

时间:2012-08-31 15:15:13

标签: mysql replace

我有一个带

的mysql表
CREATE TABLE `gfs` (
    `localidad` varchar(20),
    `fecha` datetime,
    `pp` float(8,4) NOT NULL default '0.0000',
    `temp` float(8,4) NOT NULL default '0.0000',
    PRIMARY KEY (`localidad`,`fecha`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

当我尝试使用此

更新字段时
REPLACE INTO gfs(localidad,fecha,pp) VALUES ("some_place","2012-08-05 02:00","1.6")

以前的值en temp丢失了。为什么?

3 个答案:

答案 0 :(得分:21)

正如REPLACE Syntax所述,其他人已经提到过:

  

REPLACE是SQL标准的MySQL扩展。它可以插入,也可以删除和插入。对于标准SQL的另一个MySQL扩展 - 插入或更新 - 请参阅Section 13.2.5.3, “INSERT ... ON DUPLICATE KEY UPDATE Syntax”

手册继续解释:

  

所有列的值都取自REPLACE语句中指定的值。任何缺失的列都设置为默认值,就像INSERT一样。您不能引用当前行中的值并在新行中使用它们。

因此,您需要:

INSERT INTO gfs (localidad, fecha, pp)
VALUES ('some_place', '2012-08-05 02:00', 1.6)
ON DUPLICATE KEY UPDATE pp=VALUES(pp);

答案 1 :(得分:4)

因为它是REPLACE语句而不是UPDATE。替换时,您将获取未指定的值作为默认列值。

更新允许您更改之前的值,并且在未事先选择该值的情况下对该值进行操作(SET count = count+1)。它允许所有先前设置的值保持设置。这就是你想要做的。

答案 2 :(得分:2)

来自http://dev.mysql.com/doc/refman/5.0/en/replace.html

  

REPLACE的工作原理与INSERT完全相同,只是如果在一个旧行中   table与PRIMARY KEY或UNIQUE的新行具有相同的值   index,在插入新行之前删除旧行。

您是否尝试进行UPDATE