在本教學中,您將學習在資料庫中獲取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
資料,請按照以下步驟:
UNION
分隔的所有表的所有SELECT COUNT(*)FROM table_name
語句。第一步,要獲取資料庫的所有表名,請從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;
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資料庫中一個或多個表的行數。