人们对以最有效的方式执行以下查询的想法是什么:
3列表
如果col_1
和col_2
值的组合已存在UPDATE col_3
其他INSERT
新行
我假设我需要某种类型,如果UPDATE ON DUPLICATE KEY(我之前从未使用过),但是我没有'KEY'而是一对两个值(列)来制作一个键......
答案 0 :(得分:15)
您可以在MySQL中的多个列(称为复合键)中创建PRIMARY
或UNIQUE
键,这样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的工作方式,但听起来它没有执行插入。