什么是人民的想法上性能最有效的方式做到以下查询:没有唯一列的MySQL'UPDATE ON DUPLICATE KEY'?
3列的表格
如果
col_1
和col_2
值的组合已经存在UPDATE col_3
其他
INSERT
新排
我假设我需要某种如果UPDATE ON DUPLICATE KEY(我从来没有用过),但是我没有'KEY',而是一对两个值(列)来制作一个键...
什么是人民的想法上性能最有效的方式做到以下查询:没有唯一列的MySQL'UPDATE ON DUPLICATE KEY'?
3列的表格
如果col_1
和col_2
值的组合已经存在UPDATE col_3
其他INSERT
新排
我假设我需要某种如果UPDATE ON DUPLICATE KEY(我从来没有用过),但是我没有'KEY',而是一对两个值(列)来制作一个键...
您可以在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;
最有效的方法是创建UNIQUE KEY并使用ON DUPLICATE KEY UPDATE。
较慢的方法是:
LOCK TABLE
选择表(你需要反正最佳性能的指标)
如果存在,更新
其他INSERT
UNLOCK TABLES
编辑:忽略我的建议
您可以使用复合键作为ceejayoz说,但我认为你需要REPLACE INTO而不是UPD UPDATE ON DU PLICATE KEY,因为如果找不到重复,REPLACE也会插入。
注意:我不知道UPDATE ON DUPLICATE KEY的工作方式,但它听起来像不会执行插入操作。
'ON DUPLICATE KEY UPDATE'实际上只用于'INSERT'查询。 http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html'REPLACE INTO'是一个不错的选择,因为它不允许你更新一个或两个字段 - 你有指定整行的值。 – ceejayoz 2010-07-05 16:51:11
我的不好,谢谢你的评论 – 2010-07-05 17:09:38
谢谢ceejayoz,你能给我一些ON DUPLICATE KEY的示例代码吗? – Haroldo 2010-07-05 19:46:53
@Haroldo完成,请参阅编辑。 – ceejayoz 2010-07-05 20:06:44
真棒,真的很有你 - 非常感谢!我应该快速检查 - 我只需要一次创建索引的权利? – Haroldo 2010-07-05 21:09:23