首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在使用SET选项的INSERT查询中使用ON DUPLICATE UPDATE吗?

我可以在使用SET选项的INSERT查询中使用ON DUPLICATE UPDATE吗?
EN

Stack Overflow用户
提问于 2011-10-01 11:57:32
回答 2查看 23.1K关注 0票数 7

我已经看到了以下内容(使用VALUES选项):

代码语言:javascript
复制
$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)"; 

..。但是我不知道如何在我正在使用的基础上添加重复的密钥更新:

代码语言:javascript
复制
$query = "INSERT INTO $table SET
    column-1 ='value-1',
    column-2 ='value-2',
    column-3 ='value-3'
";

例如:伪码

代码语言:javascript
复制
$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();
";

我会发现后者更容易阅读。感谢澄清,在手册中找不到一个例子。

干杯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-01 12:29:58

我经常使用ON DUPLICATE KEY UPDATE。在某些情况下,真正值得使用的是非标准SQL扩展。

首先,你需要确保你有一个唯一的键约束。只有在存在唯一键冲突的情况下,ON DUPLICATE KEY UPDATE函数才起作用。

下面是一种常用的格式:

代码语言:javascript
复制
 $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子句。我相信它应该是这样工作的:

代码语言:javascript
复制
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);

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

票数 18
EN

Stack Overflow用户

发布于 2011-10-01 12:00:22

您是否尝试过使用REPLACE INTO

http://www.mysqlperformanceblog.com/2007/01/18/insert-on-duplicate-key-update-and-replace-into/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7618056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档