【问题标题】:mysql REPLACE INTO only some fieldsmysql REPLACE INTO 仅某些字段
【发布时间】:2012-08-26 10:32:31
【问题描述】:

我有一个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 丢失。为什么 ?

【问题讨论】:

    标签: mysql replace


    【解决方案1】:

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

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

    您是否尝试改为UPDATE

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        正如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);
        

        【讨论】:

          猜你喜欢
          • 2013-03-26
          • 2011-11-29
          • 2013-03-20
          • 1970-01-01
          • 1970-01-01
          • 2010-09-05
          • 1970-01-01
          • 2019-01-21
          相关资源
          最近更新 更多