mysql connter mysql實現計數器

2021-10-17 21:56:09 字數 1734 閱讀 8763

本文**:

如果是在非常高的併發之下,還是建議用記憶體資料庫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;

mysql計數 mysql實現計數器

本文 如果是在非常高的併發之下,還是建議用記憶體資料庫redis去實現計數的功能。如果不是那麼高的併發,用表實現就可以。drop table access counter create table access counter cnt int unsigned not null insert int...

計數排序簡單實現

嘮叨完乙個 開始寫計數排序這個簡單的線性排序演算法。原理很簡單,繼續wiki 之 當輸入的元素是 n 個 0 到 k 之間的整數時,它的執行時間是 n k 計數排序不是比較排序,排序的速度快於任何比較排序演算法。由於用來計數的陣列c的長度取決於待排序陣列中資料的範圍 等於待排序陣列的最大值與最小值的...

計數排序 C 實現

一 演算法描述 插入排序 選擇排序 氣泡排序 歸併排序 堆排序以及快速排序都是比較排序演算法 各元素之間的次序依賴於他們之間的比較。在最壞情況下,任何比較排序演算法都需要做 nlgn 次比較。因此堆排序和歸併排序都是漸進最優的比較排序演算法。計數排序不是一種比較排序演算法,二是基於運算來確定元素的排...