Je dois vérifier si une base de données est totalement vide (pas de tables) en utilisant une requête SQL. Comment cela peut-il être fait?SQL pour vérifier si la base de données est vide (pas de tables)
Merci pour l'aide!
Je dois vérifier si une base de données est totalement vide (pas de tables) en utilisant une requête SQL. Comment cela peut-il être fait?SQL pour vérifier si la base de données est vide (pas de tables)
Merci pour l'aide!
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.
cela retournera aussi le nombre de vues. – longneck
Mais si ce nombre est supérieur à 0? Peut-être qu'il n'y a pas de tables, mais il y a des vues? –
@AlexKuznetsov Oui, mais je ne crois pas que vous pouvez avoir une vue sans une table sur laquelle baser? – MiffTheFox
select count(*)
from information_schema.tables
where table_type = 'BASE TABLE'
and table_schema = 'your_database_name_here'
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
vous avez raison. 'TABLE' devrait être 'BASE TABLE' à la place. – longneck
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. –
"select * from INFORMATION_SCHEMA.TABLES" vous donnera une liste des tables sur la plupart des bases de données.
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'
mise en œuvre de SQLServer:
USE database_name
SELECT COUNT(*) from information_schema.tables
WHERE table_type = 'base table'
Dans Oracle: sélectionnez Count (*) de user_tables
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 $?
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
C'est absolument la bonne façon de procéder si vous voulez obtenir toutes les bases de données vides. Merci @ Christian! –
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'"
On peut supposer que vous voulez dire « non défini par l'utilisateur tables ou vues car le catalogue système existera. –