Cerca di contare il numero di tabelle che ho in MySQL


129

Sto aumentando il numero di tabelle che ho e a volte sono curioso solo di fare una veloce query da riga di comando per contare il numero di tabelle nel mio database. È possibile? In tal caso, qual è la query?

Risposte:


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

fonte

Questo è mio:

USE databasename; 
SHOW TABLES; 
SELECT FOUND_ROWS();

Ho provato i 2 metodi precedenti e il numero di tabelle restituite quando l'ho utilizzato FOUND_ROWS()era maggiore del numero di tabelle restituite quando utilizzavo il primo metodo.
Amr

questo conta anche le viste, se vuoi solo tabelle, aggiungiAND table_type = 'BASE TABLE'
Thomasleveil il

Solo una nota sul use databasename;comando. Se il database è molto grande, il comando può essere eseguito con un lungo tempo di attesa. In tal caso, il login dovrebbe essere fatto con l'opzione -A, cioè:, mysql -uroot -p -Ae il comando funzionerà velocemente.
Azurecorn,

24

Nel caso in cui desideri un conteggio di tutti i database più un riepilogo, prova questo:

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;

Ecco un esempio:

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)

Provaci !!!


1
Ho funzionato solo quando ho usato solo la subquery. Si è verificato un errore di sintassi se ho provato a eseguire l'intera query / sottoquery.
Gaia,

2
@Gaia Siamo spiacenti, ho dimenticato che Database era una parola riservata. Quindi, ho circondato la parola con virgolette doppie.
RolandoMySQLDBA,

@RolandoMySQLDBA Questo è dolce, ne hai uno per mostrare anche la dimensione totale del db di tutti i db?
J. Scott Elblein,

@ J.ScottElblein Prova il mio post DBA.SE: dba.stackexchange.com/questions/31801/…
RolandoMySQLDBA

Perché la subquery nella FROMclausola? Perché non solo 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
Questa dovrebbe essere la risposta poiché non include le visualizzazioni! +1
Testo Testini,

4

Questo ti darà nomi e conteggio delle tabelle di tutti i database in te mysql

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

3

Per contare il numero di tabelle basta fare questo:

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

A volte le cose facili faranno il lavoro.


Questo è esattamente ciò che è nella risposta accettata aggiunta 5 anni fa.

risposta buona e unica e il comando è molto semplice. perfetto
Ajay2707 il

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

Questo è abbastanza autoesplicativo per coloro che hanno familiarità con questa query, ma per quelli che non lo sono, un po 'di spiegazione sarebbe un ottimo accompagnamento con questa risposta.
Mickmackusa,

Questa sembra essere solo una ripetizione di questa risposta esistente .
Pang

Per la cronaca: Ricorda che elementos totale include Tabelle e Viste come oggetti Database.
marcode_ely,

1

Esistono diversi modi per contare le tabelle di un database. Il mio preferito è questo su:

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

Questo non risponde alla domanda.
Mike,

1

dalla riga di comando:

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

nell'esempio sopra root è username e password, ospitati su localhost.


0
SELECT COUNT(*) FROM information_schema.tables

questo è per tutte le tabelle nei DB?


-1

Spero che questo aiuti e ritorni solo il numero di tabelle in un database

Use database;

SELECT COUNT(*) FROM sys.tables;

6
sys.tablesnon esiste inmysql
Grisha Weintraub il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.