我见过以下内容(使用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)";
...但我无法想象如何将ON DUPLICATE KEY UPDATE添加到我正在使用的内容中:
$query = "INSERT INTO $table SET
column-1 ='value-1',
column-2 ='value-2',
column-3 ='value-3'
";
例如:,伪代码
$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();
";
我会发现后者更容易阅读。希望澄清一下,没有在手册中找到一个例子。
欢呼声
答案 0 :(得分: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);"
column1 = values(column1)
表示“如果查询未达到重复键违规,则更新column1,其中包含已插入的值。”换句话说,它只是意味着将column1更新为插入工作所需的内容。
查看此代码,您正在更新您尝试插入的所有三个列似乎不正确。哪个列有独特的约束条件?
编辑:根据来自OP的问题修改基于mysql插入语句的'SET'格式。
基本上使用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);
同样,您要插入的列之一必须具有唯一索引(或列的组合)。这可能是因为其中一个是主键或因为表上有唯一索引。
答案 1 :(得分:1)