Requête pour compter le nombre de tables que j'ai dans MySQL


129

J'augmente le nombre de tables que j'ai et je suis parfois curieux de simplement faire une rapide requête en ligne de commande pour compter le nombre de tables dans ma base de données. Est-ce possible? Si oui, quelle est la requête?

Réponses:


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

La source

C'est à moi:

USE databasename; 
SHOW TABLES; 
SELECT FOUND_ROWS();

J'ai essayé les 2 méthodes ci-dessus et le nombre de tables renvoyées lorsque j'ai utilisé FOUND_ROWS()était supérieur au nombre de tables renvoyées lorsque j'ai utilisé la première méthode.
Amr

cela compte également les vues, si vous ne voulez que des tables, ajoutezAND table_type = 'BASE TABLE'
Thomasleveil

Juste une note sur la use databasename;commande. Si la base de données est vraiment volumineuse, la commande peut s'exécuter avec un long temps d'attente. Dans ce cas, la connexion doit être effectuée avec l'option -A, c'est-à-dire:, mysql -uroot -p -Aet la commande fonctionnera rapidement.
azurecorn

24

Si vous souhaitez compter toutes les bases de données plus un résumé, essayez ceci:

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;

Voici un exemple d'exécution:

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)

Essaie !!!


1
Je ne l'ai fait fonctionner que lorsque j'ai utilisé uniquement la sous-requête. Il y avait une erreur de syntaxe si j'essayais d'exécuter toute la requête / sous-requête.
Gaia

2
@Gaia Désolé, j'ai oublié que Database était un mot réservé. Donc, j'ai entouré le mot avec des guillemets doubles.
RolandoMySQLDBA

@RolandoMySQLDBA C'est gentil, en avez-vous un pour afficher également la taille totale de la base de données de toutes les bases de données?
J. Scott Elblein

@ J.ScottElblein Essayez mon message DBA.SE: dba.stackexchange.com/questions/31801/…
RolandoMySQLDBA

Pourquoi la sous-requête dans la FROMclause? Pourquoi pas juste 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
Cela devrait être la réponse car n'inclut pas les vues! +1
Testo Testini

4

Cela vous donnera les noms et le nombre de tables de toutes les bases de données de votre mysql

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

3

Pour compter le nombre de tables, procédez comme suit:

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

Parfois, des choses faciles feront le travail.


C'est exactement ce qui est dans la réponse acceptée ajoutée il y a 5 ans.

bonne et unique réponse et la chose est une commande très facile. perfect
Ajay2707

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

C'est assez explicite pour ceux qui sont familiers avec cette requête, mais pour ceux qui ne le sont pas, un peu d'explication serait un excellent accompagnement avec cette réponse.
mickmackusa

Cela semble être juste une répétition de cette réponse existante .
Pang

Pour mémoire: rappelez-vous que le total des éléments comprend les tables et les vues en tant qu'objets de base de données.
marcode_ely

1

Il peut y avoir plusieurs façons de compter les tables d'une base de données. Mon préféré est celui-ci sur:

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';

Cela ne répond pas à la question.
Mike

1

depuis la ligne de commande:

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

dans l'exemple ci-dessus, la racine est le nom d'utilisateur et le mot de passe, hébergés sur localhost.


0
SELECT COUNT(*) FROM information_schema.tables

c'est pour toutes les tables dans les DB?


-1

J'espère que cela aide et ne renvoie que le nombre de tables dans une base de données

Use database;

SELECT COUNT(*) FROM sys.tables;

6
sys.tablesn'existe pas dansmysql
Grisha Weintraub
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.