Existe-t-il un moyen de vérifier si une table existe sans en sélectionner et vérifier les valeurs?
Autrement dit, je sais que je peux aller SELECT testcol FROM testtable
vérifier le nombre de champs renvoyés, mais il semble qu'il doit y avoir un moyen plus direct / élégant de le faire.
Réponses:
Si vous voulez être correct, utilisez INFORMATION_SCHEMA .
Vous pouvez également utiliser
SHOW TABLES
S'il y a une ligne dans l'ensemble de résultats, la table existe.
la source
SELECT...FROM
syntaxe ... Je cherchais en quelque sorte quelque chose commeEXISTS testtable
si vous obtenez un compte différent de zéro, la table existe.
la source
TEMPORARY TABLE
cela ne fonctionne pas.Une comparaison des performances:
322 ms:
show tables like 'table201608';
691 ms:
select 1 from table201608 limit 1;
319 ms:
SELECT count(*) FROM information_schema.TABLES WHERE (TABLE_SCHEMA = 'mydb') AND (TABLE_NAME = 'table201608');
Notez que si vous l'exécutez beaucoup - comme pour de nombreuses requêtes HTML sur une courte période - la deuxième sera beaucoup plus rapide car elle sera mise en cache en moyenne 200 ms ou plus.
la source
Vous pouvez interroger la
tables
vue système INFORMATION_SCHEMA :Si aucune ligne n'est renvoyée, la table n'existe pas.
la source
Après avoir lu tout ce qui précède, je préfère la déclaration suivante:
Il indique exactement ce que vous voulez faire et renvoie en fait un «booléen».
la source
mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0 )
Plutôt que de vous fier aux erreurs, vous pouvez interroger
INFORMATION_SCHEMA.TABLES
pour voir si la table existe. S'il y a un enregistrement, il existe. S'il n'y a pas d'enregistrement, cela n'existe pas.la source
SELECT FROM
. :-)Voici une table qui n'est pas un SELECT * FROM
J'ai obtenu ceci d'un pro de la base de données, voici ce qu'on m'a dit:
la source
Cette solution modifiée par le haut ne nécessite pas de connaissance explicite de la base de données actuelle. Il est alors plus flexible.
la source
Juste pour ajouter un moyen supplémentaire de le faire, et en fonction de ce dont vous en avez besoin, vous pouvez utiliser un gestionnaire pour l' erreur er_no_such_table : 1146 comme ceci:
la source
afficher des tables comme "nom_table"
si cela renvoie des lignes> 0, la table existe
la source
Vous pouvez faire quelque chose comme ci-dessous:
la source
En développant cette réponse , on pourrait en outre écrire une fonction qui renvoie TRUE / FALSE en fonction de l'existence ou non d'une table:
la source
Cette méthode compacte renvoie 1 s'il existe 0 s'il n'existe pas.
Vous pouvez mettre dans une fonction mysql
et l'appelle
renvoie 1 s'il existe 0 s'il n'existe pas.
la source
J'utilise ceci en php.
la source
Il y a plusieurs problèmes à noter avec les réponses ici:
1)
INFORMATION_SCHEMA.TABLES
n'inclut pas les tables TEMPORAIRES.2) L'utilisation de tout type de
SHOW
requête, c'est-à-direSHOW TABLES LIKE 'test_table'
, forcera le retour d'un jeu de résultats au client, ce qui est un comportement indésirable pour vérifier si une table existe côté serveur, à partir d'une procédure stockée qui renvoie également un jeu de résultats.3) Comme certains utilisateurs l'ont mentionné, vous devez faire attention à la façon dont vous utilisez
SELECT 1 FROM test_table LIMIT 1
.Si vous faites quelque chose comme:
Vous n'obtiendrez pas le résultat attendu si la table ne contient aucune ligne.
Voici une procédure stockée qui fonctionnera pour toutes les tables (même TEMPORAIRE).
Il peut être utilisé comme:
Le code:
la source
Cela a été ma procédure EXISTS «go-to» qui vérifie à la fois les tables temporaires et normales. Cette procédure fonctionne dans MySQL version 5.6 et supérieure. Le paramètre @DEBUG est facultatif. Le schéma par défaut est supposé, mais peut être concaténé à la table dans l'instruction @s.
Voici l'exemple d'instruction d'appel avec @debug activé:
La variable @tblExists renvoie un booléen.
la source
Aucune des options sauf SELECT n'autorise le nom de la base de données tel qu'il est utilisé dans SELECT, j'ai donc écrit ceci:
la source