我可以使用SET选项将ON DUPLICATE KEY UPDATE与INSERT查询一起使用吗?

she*_*cky 5 php mysql key duplicates

我见过以下内容(使用VALUES选项):

$query = "INSERT INTO $table (column-1, column-2, column-3) VALUES ('value-1', 'value-2', 'value-3') ON DUPLICATE KEY UPDATE SET column1 = value1, column2 = value2, column3 = value3, ID=LAST_INSERT_ID(ID)"; 
Run Code Online (Sandbox Code Playgroud)

...但我无法想象如何将ON DUPLICATE KEY UPDATE添加到我正在使用的内容中:

$query = "INSERT INTO $table SET
    column-1 ='value-1',
    column-2 ='value-2',
    column-3 ='value-3'
";
Run Code Online (Sandbox Code Playgroud)

例如:,伪代码

$query = "INSERT INTO $table SET
    column-1 ='value-1',
    column-2 ='value-2',
    column-3 ='value-3'
    ON DUPLICATE KEY UPDATE SET
    column1 = value1,
    column2 = value2,
    column3 = value3,
    $id=LAST_INSERT_ID(id)"; 
    $my_id = mysql_insert_id();
";
Run Code Online (Sandbox Code Playgroud)

我会发现后者更容易阅读.希望澄清,没有在手册中找到一个例子.

干杯

Kev*_*ell 14

我经常使用ON DUPLICATE KEY UPDATE.对于某些情况,它是非标准的SQL扩展,真的值得使用.

首先,您需要确保具有唯一的键约束.ON DUPLICATE KEY UPDATE如果存在唯一的密钥违规,该功能才会启动.

这是一种常用的格式:

 $query = "INSERT INTO $table (column1, column2, column3)
 VALUES ('value-1', 'value-2', 'value-3')
 ON DUPLICATE KEY UPDATE
 column1 = values(column1),
 column2 = values(column2),
 column3 = values(column3);"
Run Code Online (Sandbox Code Playgroud)

column1 = values(column1)表示"如果查询未达到重复键冲突,则使用已插入的值更新column1".换句话说,它只是意味着将column1更新为插入工作所需的内容.

查看此代码,您正在更新要插入的所有三个列似乎不正确.哪个列有独特的约束条件?

编辑:根据OP的问题,根据'SET'格式修改mysql插入语句.

基本上要使用ON DUPLICATE KEY UPDATE,你只需像往常一样编写insert语句,但添加ON DUPLICATE KEY UPDATE到最后添加的子句.我相信它应该像这样工作:

INSERT INTO $table 
    set column1 = 'value-1',
        column2 = 'value-2',
        column3 = 'value-3'
ON DUPLICATE KEY UPDATE
    column1 = values(column1),
    column2 = values(column2),
    column3 = values(column3);
Run Code Online (Sandbox Code Playgroud)

同样,您要插入的列之一必须具有唯一索引(或列的组合).这可能是因为其中一个是主键,或者因为表上有唯一索引.