簡體   English   中英

mysql REPLACE INTO只有一些字段

[英]mysql REPLACE INTO only some fields

我有一個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將丟失。 為什么?

正如REPLACE語法中所述,並已被其他人提及:

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

因為它是REPLACE語句而不是UPDATE 替換時,您將獲取未指定的值作為默認列值。

更新允許您更改之前的值,並且無需事先選擇該值( SET count = count+1 )。 它允許所有先前設置的值保持設置。 這就是你想要做的。

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

REPLACE與INSERT的工作方式完全相同,只是如果表中的舊行與PRIMARY KEY或UNIQUE索引的新行具有相同的值,則在插入新行之前刪除舊行。

你想嘗試更新嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM