2009-06-18 9 views

Répondre

10
SELECT COUNT(DISTINCT `table_name`) FROM `information_schema`.`columns` WHERE `table_schema` = 'your_db_name' 

renverra le nombre réel de tables (ou de vues) dans votre base de données. Si ce nombre est 0, alors il n'y a pas de tables.

+0

cela retournera aussi le nombre de vues. – longneck

+1

Mais si ce nombre est supérieur à 0? Peut-être qu'il n'y a pas de tables, mais il y a des vues? –

+0

@AlexKuznetsov Oui, mais je ne crois pas que vous pouvez avoir une vue sans une table sur laquelle baser? – MiffTheFox

12
select count(*) 
    from information_schema.tables 
where table_type = 'BASE TABLE' 
    and table_schema = 'your_database_name_here' 
+0

Hmm, je pense qu'il y a quelque chose qui ne va pas avec ce SQL. J'utilise MySQL et j'obtiens 0 sur une base de données avec des tables dedans. – EdanB

+1

vous avez raison. 'TABLE' devrait être 'BASE TABLE' à la place. – longneck

+0

Il a bien fonctionné pour moi: Mais je ne trouve guère comment appeler Tout d'abord, j'ai écrit résultat = cmd.ExecuteNonQuery qui retourne -1 Puis après avoir trouvé résultat = int.Parse (. Cmd.ExecuteScalar() ToString()) ; qui renvoie zéro s'il n'y a pas de table. –

0

"select * from INFORMATION_SCHEMA.TABLES" vous donnera une liste des tables sur la plupart des bases de données.

6

En MYSQL:

use DATABASE; 
show tables; 
+0

ou juste 'show tables from DATABASE;' – dinvlad

1

Si vous utilisez SQL Server 2005 ou plus, vous pouvez utiliser l'une des vues du système à acheive cela pour le courant db:

select Count(*) 
from sys.tables 
where [type] = 'U' 
1

mise en œuvre de SQLServer:

USE database_name 
SELECT COUNT(*) from information_schema.tables 
WHERE table_type = 'base table' 
0

Dans Oracle: sélectionnez Count (*) de user_tables

0

je besoin de quelque chose qui me donnerait un code de sortie à utiliser dans Bash. Cela se base sur la réponse solide de @ longneck. Si la base de données contient des tables, l'instruction select définira la colonne contents comme "a tables". Grep renverra un 0 réussi dans ce cas, sinon il retournera un non-zéro.

#!/bin/bash 
user=username 
pw=passwd 
db=database 
mysql -u ${user} -p"${pw}" -D ${db} --execute="SELECT CASE COUNT(*) WHEN '0' THEN 'empty database' ELSE 'has tables' END AS contents FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_schema = '${db}';" | grep 'has tables' 
echo $? 
4

Pour obtenir une liste de toutes les bases de données sans tables MySQL:

use information_schema 

select schema_name from `schemata` s 
    left join `tables` t on s.schema_name = t.table_schema 
    where t.table_name is null 
; 

Cheers, Christian

+0

C'est absolument la bonne façon de procéder si vous voulez obtenir toutes les bases de données vides. Merci @ Christian! –

0

En bash:

db_name='my_db' 
mysql -s --skip-column-names -e "SELECT COUNT(DISTINCT table_name) FROM information_schema.columns WHERE table_schema = '$db_name'" 
Questions connexes