Сочувствие — неважная милостыня (Г. Лихтенберг).

MySQL Row Count: Как получить количество строк в MySQL

3 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
14 июня 2020
Как установить MySQL на Ubuntu 16.04
Описание : в этой статье вы узнаете, как получить количество строк MySQL в базе данных.

 

Получение количества строк MySQL в одной таблице

Чтобы получить количество строк в одной таблице, вы используете оператор COUNT(*) в SELECT следующим образом:

SELECT 
    COUNT(*)
FROM
    table_name;

 

Например, чтобы получить количество строк в таблице andreyex в примере базы данных, используйте следующий оператор:

SELECT 
    COUNT(*)
FROM
    andreyex;

 

+ ---------- +
|  COUNT(*)  |
+ ---------- +
|     35     |
+ ---------- +
1 row in set (0.01 sec)

 

Получение количества строк MySQL в двух или более таблиц

Чтобы получить количество строк в нескольких таблицах, вы используете оператор 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)

 

Получение количества строк MySQL всех таблиц в конкретной базе данных

Чтобы получить количество строк всех таблиц в конкретной базе данных, например classicmodels, вы используете следующие шаги:

  1. Во-первых, получить все имена таблиц в базе данных
  2. Во-вторых, создайте оператор SQL, который включает все операторы SELECT COUNT(*) FROM table_name для всех таблиц, разделенных UNION.
  3. В-третьих, выполните оператор SQL, используя оператор prepared

Во-первых, чтобы получить все имена таблиц базы данных, вы запрашиваете из базы данных 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;

 

Читать  MySQL. Комментарии в глубину

В этом запросе приведен список имен таблиц 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;

 

Получение количества строк MySQL всех таблиц в базе данных одним запросом

Быстрый способ получить количество строк всех таблиц в базе данных – запрос данных из базы данных 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.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close