mysql計數 mysql實現計數器

2021-10-25 14:10:02 字數 1734 閱讀 1843

本文**:

如果是在非常高的併發之下,還是建議用記憶體資料庫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乙個簡單的變數查詢 set rownum 0 select rownum rownum 1 as ranknum 變數初始值rownum設定為0,查詢一行資料變數 1,定義為排行號,也是資料行號 現在簽到表結構如下 create table sign in phone varchar ...

mysql 計數列 計數MySQL中多列的值?

要計算多列的值,請使用case語句。讓我們首先建立乙個表 mysql create table countvaluemultiplecolumnsdemo value1 int,value2 int,value3 int 以下是使用insert命令在表中插入一些記錄的查詢 mysql insert ...

mysql 生成執行計畫 MySQL的執行計畫

mysql的執行計畫 什麼是執行計畫?執行計畫通常是開發者優化sql語句的第一步。mysql在解析sql語句時,會生成多套執行方案,然後內部會進行乙個成本的計算,然後通過優化器選擇乙個最優的方案執行,然後根據這個方案會生成乙個執行計畫。開發者通過檢視sql語句的執行計畫,可以直觀的了解到mysql是...