Запит для підрахунку кількості таблиць у MySQL


129

Я збільшую кількість таблиць у мене, і мені іноді цікаво просто зробити швидкий запит командного рядка, щоб підрахувати кількість таблиць у моїй базі даних. Це можливо? Якщо так, то який запит?

Відповіді:


296
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'dbName';

Джерело

Це моє:

USE databasename; 
SHOW TABLES; 
SELECT FOUND_ROWS();

Я спробував вищевказані 2 методи, і кількість таблиць, які поверталися при використанні, FOUND_ROWS()була більша, ніж кількість таблиць, які повернулися, коли я використав перший метод.
Amr

це також враховує перегляди, якщо ви хочете лише таблиці, додайтеAND table_type = 'BASE TABLE'
Thomasleveil

Просто примітка про use databasename;команду. Якщо база даних дійсно велика, команда може виконуватися з тривалим часом очікування. У цьому випадку вхід повинен бути виконаний за допомогою параметра -A, тобто:, mysql -uroot -p -Aі команда буде працювати швидко.
azurecorn

24

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

SELECT IFNULL(table_schema,'Total') "Database",TableCount 
FROM (SELECT COUNT(1) TableCount,table_schema 
      FROM information_schema.tables 
      WHERE table_schema NOT IN ('information_schema','mysql') 
      GROUP BY table_schema WITH ROLLUP) A;

Ось приклад запуску:

mysql> SELECT IFNULL(table_schema,'Total') "Database",TableCount
    -> FROM (SELECT COUNT(1) TableCount,table_schema
    ->       FROM information_schema.tables
    ->       WHERE table_schema NOT IN ('information_schema','mysql')
    ->       GROUP BY table_schema WITH ROLLUP) A;
+--------------------+------------+
| Database           | TableCount |
+--------------------+------------+
| performance_schema |         17 |
| Total              |         17 |
+--------------------+------------+
2 rows in set (0.29 sec)

Спробувати !!!


1
Я працював лише тоді, коли використовував лише підзапит. Була синтаксична помилка, якщо я намагався запустити весь запит / підзапит.
Гая

2
@Gaia Вибачте, я забув, що База даних була зарезервованим словом. Отже, я оточив це слово подвійними цитатами.
RolandoMySQLDBA

@RolandoMySQLDBA Це солодко, чи є у вас також, щоб показати загальний розмір db всіх db?
Дж. Скотт Елблейн

@ J.ScottElblein Спробуйте мій пост DBA.SE: dba.stackexchange.com/questions/31801/…
RolandoMySQLDBA

Чому підзапит у FROMпункті? Чому б не просто SELECT IFNULL(table_schema, 'Total') Database, COUNT(*) TableCount FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql') GROUP BY table_schema WITH ROLLUP?
eggyal

10
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'dbo' and TABLE_TYPE='BASE TABLE'

1
Це має бути відповіддю, оскільки не включає перегляди! +1
Testo Testini

4

Це дасть вам імена та кількість таблиць усіх баз даних у вашому mysql

SELECT TABLE_SCHEMA,COUNT(*) FROM information_schema.tables group by TABLE_SCHEMA;

3

Для підрахунку кількості таблиць просто зробіть це:

USE your_db_name;    -- set database
SHOW TABLES;         -- tables lists
SELECT FOUND_ROWS(); -- number of tables

Іноді легкі речі зроблять свою роботу.


Це саме те, що у прийнятій відповіді, доданій 5 років тому.

хороша і унікальна відповідь, і справа дуже проста в команді. ідеально
Ajay2707

3
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'database_name';

Це досить зрозуміло для тих, хто знайомий із цим запитом, але для тих, хто цього не має, трохи пояснень було б чудовим супроводом цієї відповіді.
mickmackusa

Здається, це лише повторення цієї існуючої відповіді .
Панг

Для запису: Запам’ятайте, що загальна кількість елементів включає таблиці та представлення як об’єкти бази даних.
marcode_ely

1

Існує кілька способів підрахунку таблиць бази даних. Моє улюблене це на:

SELECT
    COUNT(*)
FROM
    `information_schema`.`tables`
WHERE
    `table_schema` = 'my_database_name'
;

1
select name, count(*) from DBS, TBLS 
where DBS.DB_ID = TBLS.DB_ID 
group by NAME into outfile '/tmp/QueryOut1.csv' 
fields terminated by ',' lines terminated by '\n';

Це не дає відповіді на запитання.
Майк

1

з командного рядка:

mysql -uroot -proot  -e "select count(*) from 
information_schema.tables where table_schema = 'database_name';"

у наведеному вище прикладі root - це ім’я користувача та пароль, розміщені на localhost.




Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.