目前我正在使用的系统的一部分涉及mysql中的日志,计数频繁更新。如果更新失败,MySQL函数插入记录?
被插入的数据是格式:
date | name | count |
-----------+------+-------+
2009-01-12 | alan | 5 |
2009-01-12 | dave | 2 |
2009-01-12 | mary | 1 |
该数据被定期从平面文件,在用于分贝插入/更新准备概括为上述解析 - 在数据库上的唯一键是(date, name)
双。
以前,在决定更新或插入之前,此系统会检查现有表中是否存在给定date
和name
对的任何记录。
我们遇到的问题是,随着此表的增长,响应时间并没有变得更好,我们希望尽可能减少查询次数。
该系统最近进行了更新运行INSERT ... ON DUPLICATE KEY UPDATE
查询,已略微降低的select
S上的数字,但我们的一些距离常见的情况是update
。
我想知道是否有人知道一个mysql函数的本质是INSERT ... ON DUPLICATE KEY UPDATE
反向,即将尝试更新一行,如果没有匹配,然后执行插入?
编辑
我没有做它上面的太清楚,我想,当我有记录('2009-01-12','alan','5')
例如做什么,就是:
UPDATE table SET count = count+5 WHERE date = '2009-01-12' and name = 'alan';
,如果上面的失败,插入上面的数据。增加计数器的需要是为什么REPLACE
不起作用。更换执行删除操作&插入,并且不会让你指的是该行被删除,所以count = count + 5
不会增加由5
@jasoncohen以前count
值 - INSERT ... ON DUPLICATE KEY UPDATE
不会做的工作,但我我问是否有更好的方法来做到这一点。
对不起原始措辞造成的任何混淆!
有道理,希望得到更多的希望比期望有一些神奇的,超级执行的MySQL查询! – ConroyP 2009-01-25 20:51:15