群里一朋友,有一需求就是获取数据库每个表的总计(条数)
思路:动态传入表名, count(1)
-- 1.执行这句。获取所有表名
Create table temp_tb (select t.table_name,@rownum:=@rownum+1 as num
from information_schema.tables t,(select @rownum:=0 ) b
where t.table_schema='test' and table_name not in ('temp','temp_tb'));
-- 2.同理获取表结构,把要统计的结果跟对应的表名放在这个表里面
Create table temp (select t.table_name,@rownum:=@rownum+1 as num
from information_schema.tables t,(select @rownum:=0 ) b
where t.table_schema='test' and table_name not in ('temp','temp_tb'));
-- 3.删除表数据保留表结构
delete from temp;
-- 4.创建存储
-- 4.创建存储
create PROCEDURE WhileLoopProc()
BEGIN
select @num :=1,@len :=count(1) from temp_tb;
while @num<@len do
select @name :=table_name from temp_tb where num =@num;
set @rownum := concat('select count(1)',' as ',@name ,' into @temp from ', @name);
set @num:=@num+1;
prepare stmt from @rownum;
EXECUTE stmt;
DEALLOCATE PREPARE stmt ;
insert into temp(table_name,num) values(@name,@temp); -- 把执行出来的结果保存到结果表中
end while;
end;
-- 5.执行存储
call WhileLoopProc;
-- 6.查询结果
select * from temp;
完事!