Php mysql替换为集合语法覆盖所有字段

Php mysql替换为集合语法覆盖所有字段,php,mysql,Php,Mysql,我有以下疑问: REPLACE INTO `oxarticles` SET OXID = '10-1010', oxartnum = '10-1010', oxtitle = 'Dummy', oxprice = '10.000000', oxstock = '100', importstatus = 1" 这项工作正如预期的那样,但我没有指定的字段只是被'/空字符串覆盖。从我读到的内容来看,这个语法是否应该像UPDATE-

我有以下疑问:

REPLACE INTO `oxarticles`
SET  
    OXID = '10-1010',  
    oxartnum = '10-1010', 
    oxtitle = 'Dummy',  
    oxprice = '10.000000',  
    oxstock = '100',  
    importstatus = 1"
这项工作正如预期的那样,但我没有指定的字段只是被
'
/空字符串覆盖。从我读到的内容来看,这个语法是否应该像
UPDATE
-命令一样工作

我错过什么了吗?如何防止字段被替换为“”

编辑1

为了澄清,我不能只使用
UPDATE
。我在每次运行前将标志(importstatus)设置为0,并在导入期间将其设置为1。导入完成后,我将删除所有仍处于状态0的项目

//为了便于竞赛,以下是PHP代码片段:

while (!feof($this->handle))
    {
        $row = fgetcsv($this->handle, 0, ";");

        $sSql = "REPLACE INTO oxarticles SET "
                . " OXID = '" . $row[0] . "', "
                . " oxartnum = '" . $row[0] . "', "
                . " oxtitle = '" . $row[1] . "', "
                . " oxprice = '" . str_replace(",", ".", $row[4]) . "', "
                . " oxstock = '" .  str_replace(",", ".", $row[5]) . "', "
                . " importstatus = 1";



        // $sSql = "UPDATE oxarticles SET oxtitle ='" . $row[1] . "', oxprice='" . $row[4] . "', oxstock='" . $row[5] . "' WHERE oxartnum ='".$row[0]."'";
        $this->db->execute($sSql);
    }

从mysql文档中:

“替换”的工作方式与“插入”完全相同,只是 表与主键或唯一键的新行具有相同的值 索引时,在插入新行之前删除旧行。看见 第13.2.5节,“插入语法”


换句话说,该行被删除然后插入,因此旧值不会保持不变。也许您可以先选择原始行,并在适当的地方反馈这些值。

如果您没有为字段提供数据,则查询将把旧数据替换为新数据。如果您不想丢失数据,只想更新字段,在重复密钥更新时使用

If did't found any match it will insert new row
If found it will replace data if provide
在表(id、a、b、c、d、e、f、g)中插入 复制密钥 更新a=a,b=b,c=c,d=d,e=e,f=f,g=g


看来我没注意到。非常感谢。我会尽快接受这个答案:)