MySQL數字輔助表
最近在做一個活動簽到的功能,每個使用者每天簽到,累計到一定次數,可以換一些獎品。
簽到表的設計如下
到了測試的階段,問題來了。
測試需要讓我做一批資料,模擬使用者簽到了20天,30天..以便測試.
這在Oracle都不是事兒,用Connect By直接可以解決.
但是MySQL沒有這個功能,
一開始,我是這麼做的
這種場景其實可以用數字輔助表的方式,在MySQL技術內幕(SQL)中有記錄
首先,建立數字輔助表
初始化資料
call pFastCreateNums(10000);
建立測試資料
這樣就建立了從 2014-12-15以後的連續10天簽到資料.
方便多了..
簽到表的設計如下
-
CREATE TABLE `award_chance_history` (
-
`id` int(11) NOT NULL AUTO_INCREMENT,
-
`awardActId` int(11) DEFAULT NULL COMMENT '活動id',
-
`vvid` bigint(20) DEFAULT NULL COMMENT '使用者id',
-
`createtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '簽到時間',
-
`reason` varchar(40) DEFAULT NULL COMMENT '事由',
-
`AdditionalChance` int(11) DEFAULT '0' COMMENT '積分變動',
-
`type` int(11) DEFAULT NULL COMMENT '型別',
-
`Chance_bak` int(11) DEFAULT '0',
-
PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
到了測試的階段,問題來了。
測試需要讓我做一批資料,模擬使用者簽到了20天,30天..以便測試.
這在Oracle都不是事兒,用Connect By直接可以解決.
但是MySQL沒有這個功能,
一開始,我是這麼做的
這種場景其實可以用數字輔助表的方式,在MySQL技術內幕(SQL)中有記錄
首先,建立數字輔助表
-
create table nums(id int not null primary key);
-
-
delimiter $$
-
create procedure pCreateNums(cnt int)
-
begin
-
declare s int default 1;
-
truncate table nums;
-
while s<=cnt do
-
insert into nums select s;
-
set s=s+1;
-
end while;
-
end $$
-
delimiter ;
-
-
delimiter $$
-
create procedure pFastCreateNums(cnt int)
-
begin
-
declare s int default 1;
-
truncate table nums;
-
insert into nums select s;
-
while s*2<=cnt do
-
insert into nums select id+s from nums;
-
set s=s*2;
-
end while;
-
end $$
- delimiter ;
call pFastCreateNums(10000);
建立測試資料
-
insert into award_chance_history(awardactid,vvid,reason,additionalChance,type,createtime)
- select 12,70021346,'手機簽到測試',10,2,date_add('2014-12-14',interval id day) from nums order by id limit 10;
方便多了..
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1362897/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 數字輔助表MySql
- 給定數字生成中文數字(MySQL)MySql
- MySQL 數字函式大全MySql函式
- mysql表最多欄位數MySql
- T-SQL——數字輔助表SQL
- mysql 字串和數字比,字串會隱式轉換為數字0MySql字串
- MySQL:Innodb中數字的儲存方式MySql
- mysql新建表和多表查詢,關鍵字joinMySql
- 儀表數字影像AI影片分析預警AI
- 查mysql欄位中的數字記錄MySql
- 檢視mysql表大小和記錄數MySql
- 資料庫數字參考表的妙用OM資料庫
- 四邊形輔助線做法
- 五,搭建環境:輔助功能
- MySQL 查詢所有表中的記錄數MySql
- MySQL 關於表名大小寫的引數MySql
- 用數字輔助表補錄資料一則
- MySQL進階實戰6,快取表、檢視、計數器表MySql快取
- MySQL單表最大記錄數不能超過多少?MySql
- mysql 查詢記錄數大於一千萬的表MySql
- 英特爾 Gaudi 加速輔助生成
- 資料資產入表:工業數字化新機遇
- 數字輔助表應用一則(分組生成行)
- 缺失的數字;及找數字分析
- 無效數字問題:Oracle-MySQL-PG大不同OracleMySql
- MySQL JDBC row_count()數字不準確的問題MySqlJDBC
- MySQL查詢某個欄位含有字母數字的值MySql
- Mysql匯入大表檔案時注意修改引數MySql
- 更快的輔助生成: 動態推測
- 使用Github Action來輔助專案管理Github專案管理
- AI輔助需求規格描述評審AI
- 找數字續;及缺失的數字分析
- 2023年中國主要數字建造數字設計廠商市場份額(附原資料表)
- 【PL/SQL】向表中插入連續數字之PL/SQL方法SQL
- 數字遊戲遊戲
- 數字加密加密
- 數字序列
- edgeR:一個數字基因表達資料差異表達分析Bioconductor程式包