MySQL 行数
如何获取MySQL表中的行数?
行数意味着数据库中有多少条记录。在开发和操作过程中,了解和监控表的增长是一项关键任务。最简单且常用的函数是使用 MySQL COUNT() 函数 ,它可以返回表中可用记录的数量。它是一个汇总函数,可以作用于整个记录集并产生单个总结输出。
我们可以使用 MySQL COUNT() 函数 来完成以下任务:
- 返回表中可用记录的数量。
- 返回查询或别名表中的行数。
- 获取列中非空值的计数。
- 获取列中不同或唯一值的计数。
语法:
下面是在 MySQL 中获取单个表的行数的语法:
SELECT COUNT (*)
FROM table_name
[WHERE conditions];
让我们用以下表格来进行演示:
表格:员工
表格:订单
举个例子,如果我们想要获取 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还允许我们获取特定数据库中所有表的行数。以下是帮助我们计算特定数据库中所有表的行数的步骤:
第一步: 首先,我们需要获取数据库中所有可用的表名。
第二步: 其次,创建一个包含所有表计数查询的SQL语句,以UNION运算符分隔。
第三步: 最后,使用MySQL prepared语句执行查询。
要获取特定数据库表的所有表名,请从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中的行数没有同步。我们可以通过在查询信息模式数据库之前运行ANALYZE TABLE语句来避免这种不准确的结果。
mysql> ANALYZE TABLE table_name, ...;