【问题标题】:MySQL 'UPDATE ON DUPLICATE KEY' without a unique column?没有唯一列的 MySQL 'UPDATE ON DUPLICATE KEY'?
【发布时间】:2010-07-06 04:06:25
【问题描述】:

人们对执行以下查询的最高效方式有何看法:

  • 三列表格

  • 如果col_1col_2值的组合已经存在UPDATE col_3

  • else INSERT 新行

如果 UPDATE ON DUPLICATE KEY (我以前从未使用过),我假设我需要某种类型,但是我没有“KEY”,而是有一对两个值(列)来制作密钥......

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以在 MySQL 中从多个列(称为复合键)中创建一个 PRIMARYUNIQUE 键,这将允许 ON DUPLICATE KEY 正常工作。

    // create a composite index
    CREATE INDEX my_composite_index ON my_table (column1, column2);
    
    // insert or update
    INSERT INTO my_table (column1, column2) VALUES ('value1', 'value2') ON DUPLICATE KEY UPDATE column3=column3+1;
    

    【讨论】:

    • 谢谢 ceejayoz,你能给我一些关于 ON DUPLICATE KEY 的示例代码吗?
    • 太棒了,你真好 - 非常感谢!我应该快速检查一下——我只需要创建一次索引对吗?
    • 是的。索引对性能非常有帮助 - 我建议阅读有关它们的 MySQL 文档。
    【解决方案2】:

    最有效的方法是创建 UNIQUE KEY 并使用 ON DUPLICATE KEY UPDATE。

    较慢的方法是:
    锁桌
    SELECT TABLE(无论如何您都需要一个索引以获得最佳性能)
    如果存在,更新
    否则插入
    解锁表格

    【讨论】:

      【解决方案3】:

      编辑:忽略我的建议

      您可以像 ceejayoz 所说的那样使用复合键,但是我认为您需要 REPLACE INTO 而不是 UPDATE ON DUPLICATE KEY 因为如果没有找到重复项,REPLACE 也会插入。

      注意:我不知道 UPDATE ON DUPLICATE KEY 的工作原理,但听起来它不执行插入操作。

      【讨论】:

      猜你喜欢
      • 2010-11-20
      • 2018-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      相关资源
      最近更新 更多