mysql系统表information_schema.TABLES统计各表数量时不准确,又有统计所有库表数据量的需求,特总结存储过程如下:
其中用到了游标(cursor),循环(loop),动态SQL预处理(prepare)等技术
1、创建统计结果表
CREATE TABLE `table_rows` (
`v_tab_schema` varchar(255) DEFAULT NULL COMMENT '数据库名',
`v_tab_name` varchar(255) DEFAULT NULL COMMENT '表名',
`v_tab_comment` varchar(500) DEFAULT NULL COMMENT '表注释',
`v_count` varchar(255) DEFAULT NULL COMMENT '表记录数',
`sysdate` datetime DEFAULT NULL COMMENT '统计时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='统计结果表';
2、存储过程
/* root更改为创建存储过程的用户名 */
CREATE DEFINER=`root`@`%` PROCEDURE `count_rows`()
BEGIN
DECLARE sql_str VARCHAR (500);
declare no_more_departments integer DEFAULT 0;
/* 查询information_schema.TABLES所有库及表,并拼接成统计表数据量语句