📅  最后修改于: 2020-11-19 02:17:39             🧑  作者: Mango
行数表示数据库中有多少记录可用。这是在开发和运营过程中查找和监视表增长的一项关键活动。这使我们回到表中的可记录数的最简单和流行的函数是MySQL COUNT()函数。它是一个聚合函数,可处理整个记录集并产生单个汇总输出。
我们可以使用MySQL COUNT()函数完成以下任务:
以下是获取MySQL中单个表的行数的语法:
SELECT COUNT (*)
FROM table_name
[WHERE conditions];
让我们以下表进行演示:
表:员工
表:订单
例如,如果要获取employee表中的总行数,则需要使用以下语法:
mysql> SELECT COUNT(*) AS Row_Count FROM employee;
我们应该得到如下屏幕截图所示的输出:
如果要获取两个或多个表的行数,则需要使用子查询,即,每个单独的表使用一个子查询。
假设我们要在单个查询中获取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还允许我们获取特定数据库中所有表的行数。以下是帮助我们计算特定数据库中所有表的行数的步骤:
步骤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还提供查询以对特定数据库中所有表的行进行计数。最快的方法是直接从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, ...;