web-dev-qa-db-fra.com

MySQL - Comment compter toutes les lignes par table dans une requête

Existe-t-il un moyen d'interroger la base de données pour savoir combien de lignes il y a dans toutes les tables?

c'est à dire.

table1 1234
table2 222
table3 7888

J'espère que vous pourrez conseiller

59
Lee
SELECT 
    TABLE_NAME, 
    TABLE_ROWS 
FROM 
    `information_schema`.`tables` 
WHERE 
    `table_schema` = 'YOUR_DB_NAME';
135
great_llama

Ce qui précède vous donnera une approximation, mais si vous voulez un compte exact, vous pouvez le faire en deux étapes. Tout d'abord, exécutez une requête comme suit:

select concat("select '",table_name,"', count(*) from ",table_name,";") 
from `information_schema`.`tables` 
WHERE `table_schema` = '[your schema here]';

Cela produira une liste d'instructions SQL, une pour chaque table de votre base de données, que vous pourrez ensuite exécuter pour obtenir un nombre exact.

6
ande
SELECT 
    table_name, 
    table_rows 
FROM 
    INFORMATION_SCHEMA.TABLES
5
Nir

Cela vous donnera le nom exact de la table et comptera sur une seule liste

SELECT CONCAT('SELECT ''',table_name,''', COUNT(*) FROM ', table_name, ' union all') 
      FROM information_schema.tables WHERE table_schema = 'clw';
5
petrichi
select sum(cnt) from
(
select count(*) as cnt from table1
union ALL
select count(*) as cnt from table2
union ALL
select count(*) as cnt from table3 
)t1
3
a1ex07

En synthétisant les informations ci-dessus et ce message dans un ensemble de requêtes, nous obtenons une requête auto-écriture qui donnera un nombre précis de lignes:

SET @tableSchema = 'my_schema';
SET SESSION group_concat_max_len = 10000000;
SET @rowCounts = (
  SELECT group_concat(CONCAT('SELECT ''',TABLE_NAME,''', COUNT(*) FROM ', TABLE_NAME) SEPARATOR ' union all ')
  FROM information_schema.tables WHERE table_schema = @tableSchema
);
PREPARE statement FROM @rowCounts;
EXECUTE statement;

-- don't run dealloc until you've exported your results ;)
DEALLOCATE PREPARE statement;
3
tjmcewan

Veut probablement cela si vous voulez juste des tables et pas de vues:

SELECT TABLE_NAME, TABLE_ROWS
FROM   `information_schema`.`tables` 
WHERE  `table_schema` = 'schema'
       AND TABLE_TYPE = 'BASE TABLE';
0
OneSimpleGeek