Описание : в этой статье вы узнаете, как получить количество строк MySQL в базе данных.
Чтобы получить количество строк в одной таблице, вы используете оператор COUNT(*) в SELECT следующим образом:
SELECT COUNT(*) FROM table_name;
Например, чтобы получить количество строк в таблице andreyex в примере базы данных, используйте следующий оператор:
SELECT COUNT(*) FROM andreyex;
+ ---------- + | COUNT(*) | + ---------- + | 35 | + ---------- +
1 row in set (0.01 sec)
Чтобы получить количество строк в нескольких таблицах, вы используете оператор UNION для объединения наборов результатов, возвращаемых каждым отдельным оператором SELECT.
Например, чтобы получить количество строк таблиц andreyex и trainings в одном запросе, используйте следующую инструкцию.
SELECT 'andreyex' tablename, COUNT(*) rows FROM andreyex UNION SELECT 'trainings' tablename, COUNT(*) rows FROM trainings;
+ ----------- + ------ + | tablename | rows | + ----------- + ------ + | andreyex | 34 | | trainings | 451 | + ----------- + ------ +
2 rows in set (0.01 sec)
Чтобы получить количество строк всех таблиц в конкретной базе данных, например classicmodels, вы используете следующие шаги:
Во-первых, чтобы получить все имена таблиц базы данных, вы запрашиваете из базы данных information_schema следующее:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'classicmodels' AND table_type = 'BASE TABLE';
+ -------------- + | TABLE_NAME | + -------------- + | andreyex | | trainings | | sites | + -------------- +
3 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 = 'classicmodels' 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 = 'classicmodels' 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 s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
Быстрый способ получить количество строк всех таблиц в базе данных — запрос данных из базы данных information_schema напрямую:
SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = 'classicmodels' ORDER BY table_name;
Этот метод иногда не точен, потому что количество строк в information_schema и фактическое количество строк в таблицах не синхронизированы. Чтобы избежать этого, вы должны выполнить инструкцию ANALYZE TABLE перед запросом количества строк из базы данных information_schema.
ANALYZE TABLE table_name, ...;
В этой статье вы узнали о различных способах получения количества строк одной или нескольких таблиц в базе данных MySQL.