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?

Genadinik
la source

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();
Joseadrian
la source
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 !!!

RolandoMySQLDBA
la source
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'
Mukund
la source
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;
Rohit Dubey
la source
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.

jmm
la source
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';
Arun Kasyakar
la source
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'
;
automatix
la source
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';
Swamy
la source
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.

Rajiv Singh
la source
0
SELECT COUNT(*) FROM information_schema.tables
Shan
la source
c'est pour toutes les tables dans les DB?
0

mysql> afficher les tables;

il montrera les noms des tables, puis le décompte des tables.

la source

Mohammed Nosirat
la source
-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;
mjohnbatcha
la source
6
sys.tablesn'existe pas dansmysql
Grisha Weintraub