2010-07-05 91 views
7

什么是人民的想法上性能最有效的方式做到以下查询:没有唯一列的MySQL'UPDATE ON DUPLICATE KEY'?

  • 3列的表格

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

  • 其他INSERT新排

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

回答

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; 
+0

谢谢ceejayoz,你能给我一些ON DUPLICATE KEY的示例代码吗? – Haroldo 2010-07-05 19:46:53

+0

@Haroldo完成,请参阅编辑。 – ceejayoz 2010-07-05 20:06:44

+0

真棒,真的很有你 - 非常感谢!我应该快速检查 - 我只需要一次创建索引的权利? – Haroldo 2010-07-05 21:09:23

1

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

较慢的方法是:
LOCK TABLE
选择表(你需要反正最佳性能的指标)
如果存在,更新
其他INSERT
UNLOCK TABLES

-1

编辑:忽略我的建议

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

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

+3

'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

+0

我的不好,谢谢你的评论 – 2010-07-05 17:09:38

相关问题