mysql 获取行数_MySQL获取行数

在本教程中,您将学习在数据库中获取MySQL行计数的各种方法。

获取单个表的MySQL行计数

要获取单个表的行计数,可以在SELECT语句中使用COUNT(*),如下所示:

SELECT

COUNT(*)

FROM

table_name;

例如,要获取示例数据库(yiibaidb)中的customers表中的行数,可以使用以下语句:

SELECT

COUNT(*)

FROM

customers;

执行上面查询语句,得到以下结果 –

+----------+

| COUNT(*) |

+----------+

| 122 |

+----------+

1 row in set (0.01 sec)

获取MySQL两个或多个表的行计数

要获取多个表的行数,可以使用UNION运算符组合每个SELECT语句返回的结果集。

例如,要在单个查询中获取customers和orders表的行数,请使用以下语句。

SELECT

'customers' tablename,

COUNT(*) rows

FROM

customers

UNION

SELECT

'orders' tablename,

COUNT(*) rows

FROM

orders;

获取特定数据库中所有表的MySQL行计数

要获取行计数特定数据库中的所有表,例如yiibaidb数据,请按照以下步骤:

首先,获取数据库中的所有表名

第二步,构造一个SQL语句,其中包含由UNION分隔的所有表的所有SELECT COUNT(*)FROM table_name语句。

第三步,使用准备语句执行SQL语句。

第一步,要获取数据库的所有表名,请从information_schema数据库中查询如下:

SELECT

table_name

FROM

information_schema.tables

WHERE

table_schema = 'yiibaidb'

AND table_type = 'BASE TABLE';

执行上面查询,得到以下结果 –

+--------------+

| TABLE_NAME |

+--------------+

| customers |

| employees |

| offices |

| orderdetails |

| orders |

| payments |

| productlines |

| products |

+--------------+

8 rows in set (0.02 sec)

第二步,构造SQL语句,我们使用GROUP_CONCAT和CONCAT函数如下:

SELECT

CONCAT(GROUP_CONCAT(CONCAT('SELECT \'',

table_name,

'\' table_name,COUNT(*) rows FROM ',

table_name)

SEPARATOR ' UNION '),

' ORDER BY table_name')

INTO @sql

FROM

table_list;

在此查询中,table_list是第一步中查询结果的表名列表。

以下查询使用第一个查询作为派生表,并以字符串形式返回SQL语句。

SELECT

CONCAT(GROUP_CONCAT(CONCAT('SELECT \'',

table_name,

'\' table_name,COUNT(*) rows FROM ',

table_name)

SEPARATOR ' UNION '),

' ORDER BY table_name')

INTO @sql

FROM

(SELECT

table_name

FROM

information_schema.tables

WHERE

table_schema = 'yiibaidb'

AND table_type = 'BASE TABLE') table_list;

如果您使用MySQL 8.0+,则可以使用MySQL CTE(通用表表达式)而不是派生表:

WITH table_list AS (

SELECT

table_name

FROM information_schema.tables

WHERE table_schema = 'yiibaidb' AND

table_type = 'BASE TABLE'

)

SELECT CONCAT(

GROUP_CONCAT(CONCAT("SELECT '",table_name,"' table_name,COUNT(*) rows FROM ",table_name) SEPARATOR " UNION "),

' ORDER BY table_name'

)

INTO @sql

FROM table_list;

第三步,使用prepare语句执行@sql语句,如下所示:

USE yiibaidb;

PREPARE s FROM @sql;

EXECUTE s;

DEALLOCATE PREPARE s;

执行上面查询统计语句,得到以下结果 –

+--------------+------+

| table_name | rows |

+--------------+------+

| customers | 122 |

| departments | 0 |

| employees | 23 |

| items | 9 |

| offices | 7 |

| orderdetails | 2998 |

| orders | 327 |

| payments | 273 |

| productlines | 7 |

| products | 110 |

| tasks | 0 |

| tokens | 1 |

+--------------+------+

12 rows in set

使用一个查询获取数据库中所有表的MySQL行计数

获取数据库中所有表的行计数的快速方法是直接从information_schema数据库中查询数据:

SELECT

table_name,

table_rows

FROM

information_schema.tables

WHERE

table_schema = 'yiibaidb'

ORDER BY table_rows desc;

执行上面查询,得到以下结果 –

mysql> SELECT

table_name,

table_rows

FROM

information_schema.tables

WHERE

table_schema = 'yiibaidb'

ORDER BY table_rows desc;

+--------------+------------+

| table_name | table_rows |

+--------------+------------+

| orderdetails | 2731 |

| orders | 326 |

| payments | 256 |

| customers | 122 |

| products | 110 |

| employees | 23 |

| items | 9 |

| productlines | 7 |

| offices | 7 |

| tokens | 0 |

| tasks | 0 |

| departments | 0 |

+--------------+------------+

12 rows in set

此方法有时不准确,因为表中的information_schema中的行计数和实际行计数不同步。 为避免这种情况,您必须在从information_schema数据库查询行计数之前运行ANALYZE TABLE语句。

ANALYZE TABLE table_name, ...;

在本教程中,您已经学习了各种方法来获取MySQL数据库中一个或多个表的行数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值