如果更新失败,MySQL函数插入记录?

Con*_*oyP 8 mysql optimization

我正在研究的系统的一部分涉及登录mysql,计数经常更新.

插入的数据格式如下:

   date    | name | count |
-----------+------+-------+
2009-01-12 | alan |   5   |
2009-01-12 | dave |   2   |
2009-01-12 | mary |   1   |
Run Code Online (Sandbox Code Playgroud)

这些数据定期从平面文件中解析,如上所述,为db插入/更新做准备 - 数据库上的唯一键是该(date, name)对.

以前,此系统会检查现有表中是否有给定的记录 datename在决定更新或插入和对的.

我们遇到的问题是,随着这个表的增长,响应时间没有变得更好,我们希望尽可能减少查询数量.

该系统最近更新为运行一个INSERT ... ON DUPLICATE KEY UPDATE查询,这减少了selects 的数量,但我们的常见情况是一定距离是update.

我想知道是否有人知道一个基本上INSERT ... ON DUPLICATE KEY UPDATE是反向的mysql函数,即将尝试更新一行,如果没有匹配则执行插入?


编辑

我上面没有说清楚,当我有记录时我想做什么 ('2009-01-12','alan','5')例如,是:

UPDATE table SET count = count+5 WHERE date = '2009-01-12' and name = 'alan';
Run Code Online (Sandbox Code Playgroud)

如果上述操作失败,请插入以上数据.增加一个计数器的需要是为什么REPLACE不起作用.替换执行删除和插入,并且不允许您引用要删除的行,因此count = count + 5不会将先前的count值增加5.

@jasoncohen - INSERT ... ON DUPLICATE KEY UPDATE确实可以完成这项工作,但我想问是否有更优化的方法来做到这一点.

抱歉由于原始措辞不佳导致的任何混乱!

Mic*_*uen 3

都是一样的。使用“UPDATE ... ON NO KEY INSERT”,数据库引擎仍然必须首先检查是否有需要更新的内容。因此,即使更新是最常见的,也不需要单独的构造