【问题标题】:INSERT ... ON DUPLICATE KEY UPDATE (Two keys to compare)INSERT ... ON DUPLICATE KEY UPDATE(要比较的两个键)
【发布时间】:2013-03-21 21:42:12
【问题描述】:

我想要做的只是增加第 4 列的值,如果它不存在,当有 col0 = valuecol0 AND col2 = valuecol2 的行在表中时。 否则,我当然想插入行。

INSERT INTO tablename (col0, col1, col2, col3) 
VALUES (valuecol0, valuecol1, valuecol2, valuecol3) 
ON DUPLICATE KEY UPDATE col3 = col3 + VALUES( col3 );

无论如何,我不知道应该如何在表中设置索引,我阅读了文档here 中的页面,但它并没有太多帮助。所以我尝试了所有四种可能的组合,但没有一种奏效!

我哪里失败了?

【问题讨论】:

    标签: mysql sql sql-server insert duplicates


    【解决方案1】:

    要生成密钥冲突,您可以使用唯一索引:

    create unique index IX_YourTable_Col0Col2 on YourTable (col0, col2);
    

    有了这个索引,你可以使用on duplicate key update语法:

    insert into YourTable (col0, col1, col2, col3) 
    values (1, 2, 1, 2) 
    on duplicate key update col3 = col3 + 2;
    

    Example at SQL Fiddle.

    【讨论】:

    • 谢谢!你能解释一下这一行吗:在 YourTable (col0, col2) 上创建唯一索引 IX_YourTable_Col0Col2;具体来说:名称 IX_YourTable_Col0Col2 尊重什么约定?你会如何阅读整行?
    • IX_YourTable_Col0Col2 只是一个名字。唯一索引的前缀应该是 UX_ :) 第三个变体是主键的 PK_。对于整行,请参阅create index 的文档
    猜你喜欢
    • 2016-10-29
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2017-04-14
    • 2013-10-03
    • 1970-01-01
    • 2015-07-30
    • 2011-01-29
    相关资源
    最近更新 更多