mysql REPLACE INTO只有一些字段

Jua*_*blo 8 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;
Run Code Online (Sandbox Code Playgroud)

当我尝试使用此更新字段时

REPLACE INTO gfs(localidad,fecha,pp) VALUES ("some_place","2012-08-05 02:00","1.6")
Run Code Online (Sandbox Code Playgroud)

先前的值en temp将丢失.为什么?

egg*_*yal 22

正如REPLACESyntax中所记录的那样,并已被其他人提及:

REPLACE是SQL标准的MySQL扩展.它可以插入,删除和插入.对于标准SQL的另一个MySQL扩展 - 插入或更新 - 请参见第13.2.5.3节" INSERT ... ON DUPLICATE KEY UPDATE语法".

手册继续解释:

所有列的值都取自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);
Run Code Online (Sandbox Code Playgroud)


Not*_*aeL 2

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

REPLACE 的工作方式与 INSERT 完全相同,只不过如果表中的旧行与 PRIMARY KEY 或 UNIQUE 索引的新行具有相同的值,则在插入新行之前会删除旧行。

您是否尝试进行更新