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