设计积分数据库的时候,就是用简单的update point = point + 5 这样的方式来实现积分的累计。
然后发现这样方式是可以被刷分的,我用的是php,每次从log表中查找这次update是否有加过,如果没执行过的话,就执行update,同时在log表插入执行过的记录。
然后发现,如果用发包的工具或者两台电脑,同一时间访问这个网页,一开始的log表查询都判断为真,因为还没有插入记录。便都执行update去了。。于是。。同一时间便执行了2次update。
后来我用每次都sum一下log中的数值来补的漏洞现在log量大了,每次sum都效率很低,求教用什么方法可以防止这样的刷分。

解决方案 »

  1.   

    这个应该可以通过锁表(LOCK TABLES)的方式来做
      

  2.   

    增加一个字段   added 如果为0可以加,为1者是加过了
      

  3.   

    1楼的锁表,不一定可行,经过我一天的研究,查询资料,在网上得出如下结论:一般的情况下,更新都是隐式加了锁了,而且重复提交或是从两个终端来提交,情况是不一样的。
    这跟MYSQL的引擎有关系,不是所有数据库处理锁的方式都一致如果只有一个终端,则建议用3楼的方法