本文转自:https://blog.csdn.net/stevendbaguo/article/details/70889449

如果是在非常高的并发之下,还是建议用内存数据库redis去实现计数的功能。如果不是那么高的并发,用表实现就可以。

DROP TABLE access_counter;

CREATE TABLE access_counter(
  cnt  INT UNSIGNED NOT NULL 
);

INSERT INTO access_counter VALUES(0);
UPDATE access_counter SET cnt=cnt+1;
SELECT * FROM access_counter;
--上面的方法在高并发性上有问题,会产生大量的锁

DROP TABLE access_counter;
CREATE TABLE access_counter(
 solt INT NOT NULL PRIMARY KEY,
 cnt INT NOT NULL
);

DELIMITER $
DROP PROCEDURE IF EXISTS `proc1`$
CREATE PROCEDURE `proc1`()
BEGIN
  DECLARE i INT; 
    SET i=0; 
    WHILE i<100 DO 
      INSERT INTO access_counter VALUES(i,0);
      SET i=i+1; 
    END WHILE;     
 END$
DELIMITER ;

CALL proc1();

SELECT * FROM access_counter;

--这样就随机选择一个solt进行更新
--RAND()函数调用可以在0和1之间产生一个随机数
UPDATE access_counter SET cnt=cnt+1 WHERE solt=FLOOR(RAND()*100);

--如果每隔一天开始一个新的计数器,那方法是:
DROP TABLE access_counter;
CREATE TABLE access_counter(
 access_day DATE NOT NULL,
 solt INT NOT NULL,
 cnt INT NOT NULL,
 PRIMARY KEY(access_day,solt)
);
--DUPLICATE KEY UPDATE 跟Oracle的merge INTO 类似
INSERT INTO access_counter(access_day,solt,cnt)
  VALUES(CURRENT_DATE,FLOOR(RAND()*100),1)
  ON DUPLICATE KEY UPDATE cnt=cnt+1;
  
--如果不想有太多数据,那就每天删一次
UPDATE access_counter AS a INNER JOIN
(SELECT access_day,SUM(cnt) AS cnt,MIN(solt) AS msolt FROM access_counter
GROUP BY access_day) AS b 
USING (access_day)
SET a.cnt =  IF(a.`solt`= b.msolt,b.cnt,0),
    a.solt = IF(a.`solt`= b.msolt,0,a.`solt`);

DELETE FROM access_counter WHERE solt<>0 AND cnt=0;

最新文章

  1. 《社交网络》里的评分公式——ELO排名系统
  2. Java设计模式之单例模式
  3. springboot中swaggerUI的使用
  4. 暑假前的flag
  5. 【PHP面向对象(OOP)编程入门教程】13.访问类型(public,protected,private)
  6. [JLOI2013]卡牌游戏
  7. Java多线程内存模型
  8. 模仿微信&amp;quot;转你妹&amp;quot;游戏
  9. 看源码之Adapter和AdapterView之间的关系
  10. App_Code
  11. 非常基本的SQL 内外连接
  12. linux kernel 编译
  13. [即时通讯]openfire启动失败解决办法
  14. xBIM 插入复制功能
  15. BZOJ1431 : MLand
  16. Altium Designer 放置机械孔
  17. cf1073D Berland Fair (二分答案+树状数组)
  18. docker+jenkins的构建历史记录(Build History)时间不正确
  19. Eclipse使用maven命令安装第三方jar包
  20. webstorm打开后无法显示文件夹目录

热门文章

  1. July Cook-Off 2017
  2. 【linux+C】神器 vim + 指针相关客串
  3. ImportCommon
  4. mfc给对话框添加背景
  5. maven构建java项目、web项目
  6. Identity Server 4 原理和实战(完结)_Implicit Flow 实例
  7. webstrom打开多个项目,webstrom常用快捷键
  8. jQuery 设置图片 src 的2种方法
  9. uoj#267. 【清华集训2016】魔法小程序(乱搞)
  10. Springboot整合elasticSearch的官方API实例