MySQL 获取行数

一、如何在 MySQL 获取行数

行数表示数据库中有多少记录可用。它是在开发和操作过程中发现和监控表增长的关键活动。允许我们返回表中可用记录数的最简单和流行的函数是MySQL COUNT() 函数。它是一个聚合函数,适用于整个记录集并生成单个汇总输出。

我们可以使用MySQL 的 COUNT() 函数来完成以下事情:

  • 返回表中可用的记录数。
  • 通过查询或别名表返回行数。
  • 获取列中非空值的计数。
  • 获取列中不同或唯一值的计数。

二、My SQL 获取行数 语法

以下是获取MySQL中单个表的行数的语法:

SELECT COUNT (*)  
FROM table_name  
[WHERE conditions];  

让我们以下表进行演示:

employee表:

orders表:

例如,如果我们要获取employee表中的总行数,我们需要使用如下语法:

mysql> SELECT COUNT(*) AS Row_Count FROM employee;  

我们应该得到如下截图所示的输出:

三、获取两个或多个表的 MySQL 行数

如果我们想获得两个或多个表的行数,则需要使用子查询,即每个单独的表一个子查询。

例子

假设我们要在单个查询中获取employee和orders表的行数,我们必须执行如下查询:

mysql> SELECT   
    (SELECT COUNT(*) FROM employee) As Table1Count,   
    (SELECT COUNT(*) FROM orders) As Table2Count;  

我们将得到如下输出的结果:

我们还可以使用UNION运算符来获取两个或多个表的行数,其中运算符结合了单个SELECT 查询返回的结果:

mysql> SELECT 'employee' table_name1, COUNT(*) AS row1 FROM employee UNION SELECT 'orders' table_name2, COUNT(*) AS row2 FROM orders;  

输出结果为:

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

MySQL 还允许我们获取特定数据库中所有表的行数。以下是帮助我们计算特定数据库中所有表的行数的步骤:

第 1 步:首先,我们需要获取数据库中所有可用的表名。

第 2 步:其次,创建一条 SQL 语句,其中包括对由 UNION 运算符分隔的所有表的计数查询。

第 3 步:最后,使用 MySQL Prepared Statement 执行查询。

要获取特定数据库表的所有表名,请从 information_schema 数据库执行以下查询:

mysql> SELECT table_name FROM information_schema.tables  
WHERE table_schema = 'testdb' AND table_type = 'BASE TABLE';  

上面提到的数据库有以下几个表:

接下来,构造 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 = 'testdb' 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 = 'testdb' 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;  

第三,使用准备好的语句执行@sql语句,如下所示:

PREPARE stmt FROM  @sql;  
EXECUTE stmt;  
DEALLOCATE PREPARE stmt;  

执行上述语句后,我们会得到如下输出:

四、使用单个查询获取数据库中所有表的 MySQL 行数

MySQL 还提供了一个查询来计算特定数据库中所有表的行数。最快的方法是直接从information_schema数据库中查询数据。请参阅以下声明:

mysql> SELECT table_name, table_rows  
    FROM information_schema.tables  
    WHERE table_schema = 'testdb'  
    ORDER BY table_name;  

执行后,我们会得到如下结果:

有时此查询不会返回准确的结果。这是因为表中的实际行数和 information_schema 中的行数不同步。我们可以通过在从 information_schema 数据库中查询行数之前运行 ANALYZE TABLE 语句来避免这种不准确的结果。

mysql> ANALYZE TABLE table_name, ...;  

 

热门文章

优秀文章