我已经看到了以下内容(使用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)"; ..。但是我不知道如何在我正在使用的基础上添加重复的密钥更新:
$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();
";我会发现后者更容易阅读。感谢澄清,在手册中找不到一个例子。
干杯
发布于 2011-10-01 12:29:58
我经常使用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更新为插入正常工作时的状态。
从这段代码中可以看出,您尝试插入的所有三个列都进行了更新,这似乎并不正确。哪一列对它有唯一的约束?
编辑:根据操作中的问题,根据mysql insert语句的'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);同样,您要插入的其中一列必须具有唯一索引(或列的组合)。这可能是因为它们中的一个是主键,或者是因为表上有一个唯一的索引。
发布于 2011-10-01 12:00:22
您是否尝试过使用REPLACE INTO?
http://www.mysqlperformanceblog.com/2007/01/18/insert-on-duplicate-key-update-and-replace-into/
https://stackoverflow.com/questions/7618056
复制相似问题