求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

mysql教程
MySQL快速学习入门
MySQL是什么
MySQL安装
MySQL示例数据库
MySQL导入示例数据库
MySQL基础教程
MySQL查询数据
MySQL WHERE语句
MySQL插入数据
MySQL更新表数据
MySQL删除表数据
MySQL创建与删除数据库
MySQL创建表
MySQL修改表结构
MySQL重命名表
MySQL数据类型
高级部分
MySQL技巧
MySQL存储过程
MySQL视图
MySQL触发器
MySQL管理
MySQL全文搜索
MySQL函数
应用程序连接
MySQL+Node.js连接和操作
Python+MySQL连接和操作
 
 

MySQL获取行数
666 次浏览
7次  

在本教程中,您将学习在数据库中获取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数据库中一个或多个表的行数。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



666 次浏览
7次
 捐助