mysql 查询表总行数字段_MySQL:在单个查询中汇总所有表的行数

小编典典

这里的第一个示例代码是一个存储过程,就用户而言,它一步一步执行了整个过程。

BEGIN

# zgwp_tables_rowcounts

# TableName RowCount

# Outputs a result set listing all tables and their row counts

# for the current database

SET SESSION group_concat_max_len = 1000000;

SET @sql = NULL;

SET @dbname = DATABASE();

SELECT

GROUP_CONCAT(

CONCAT (

'SELECT ''',table_name,''' as TableName, COUNT(*) as RowCount FROM ',

table_name, ' '

)

SEPARATOR 'UNION '

) AS Qry

FROM

information_schema.`TABLES` AS t

WHERE

t.TABLE_SCHEMA = @dbname AND

t.TABLE_TYPE = "BASE TABLE"

ORDER BY

t.TABLE_NAME ASC

INTO @sql

;

PREPARE stmt FROM @sql;

EXECUTE stmt;

END

笔记:

SELECT..INTO @sql创建必要的查询,然后PREPARE … EXECUTE运行它。

设置group_concat_max_len变量,以允许GROUP_CONCAT提供足够长的结果字符串。

上面的过程对于在Navicat之类的管理环境中或命令行上快速浏览很有用。但是,尽管返回了一个结果集,据我所知它无法在另一个视图或查询中引用,大概是因为MySQL无法在运行它之前确定它产生的结果集,以及它们具有的列。

因此,无需人工编辑即可快速生成单独的SELECT …

UNION语句(可用作视图)仍然很有用。如果要将行计数与另一个表中的其他每个表信息结合起来,这很有用。附带另一个存储过程:

BEGIN

# zgwp_tables_rowcounts_view_statement

# Output: SelectStatement

# Outputs a single row and column, containing a (possibly lengthy)

# SELECT...UNION statement that, if used as a View, will output

# TableName RowCount for all tables in the current database.

SET SESSION group_concat_max_len = 1000000;

SET @dbname = DATABASE();

SELECT

GROUP_CONCAT(

CONCAT (

'SELECT ''',table_name,''' as TableName, COUNT(*) as RowCount FROM ',

table_name, ' ', CHAR(10))

SEPARATOR 'UNION '

) AS SelectStatement

FROM

information_schema.`TABLES` AS t

WHERE

t.TABLE_SCHEMA = @dbname AND

t.TABLE_TYPE = "BASE TABLE"

ORDER BY

t.TABLE_NAME ASC

;

END

笔记

与概念上的第一个过程非常相似。我在每个子“ SELECT … UNION”语句中添加了一个换行符(CHAR(10)),以方便查看或编辑该语句。

如果对您的环境更方便,则可以将其创建为函数并返回SelectStatement。

希望能有所帮助。

2020-05-17

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值