没有唯一列的MySQL'UPDATE ON DUPLICATE KEY'?

时间:2010-07-05 16:17:57

标签: mysql

人们对以最有效的方式执行以下查询的想法是什么:

  • 3列表

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

  • 其他INSERT新行

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

3 个答案:

答案 0 :(得分:15)

您可以在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;

答案 1 :(得分:1)

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

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

答案 2 :(得分:-1)

编辑:忽略我的建议

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

注意:我不知道UPDATE ON DUPLICATE KEY的工作方式,但听起来它没有执行插入。