220 votes

Vérifier si une table MySQL existe sans utiliser la syntaxe "select from" ?

Existe-t-il un moyen de vérifier si une table existe ? sans en sélectionnant et en vérifiant les valeurs qu'il contient ?

C'est-à-dire que je sais que je peux aller SELECT testcol FROM testtable et vérifier le nombre de champs retournés, mais il semble qu'il doit y avoir un moyen plus direct / élégant de le faire.

1 votes

@SaurabhChopra C'est pour SQL Server, ceci est une question sur MySql.

411voto

Sergio Tulentsev Points 82783

Si vous voulez être correct, utilisez INFORMATION_SCHEMA .

SELECT * 
FROM information_schema.tables
WHERE table_schema = 'yourdb' 
    AND table_name = 'testtable'
LIMIT 1;

Alternativement, vous pouvez utiliser SHOW TABLES

SHOW TABLES LIKE 'yourtable';

S'il y a une ligne dans le jeu de résultats, la table existe.

3 votes

Oui, cela fonctionne bien et est élégant, mais utilise toujours SELECT...FROM syntaxe... Je cherchais en quelque sorte quelque chose comme EXISTS testtable

11 votes

La façon dont Marc et moi-même avons indiqué de le faire est la bonne. Il n'y a pas de déclaration de type 'exists' dans MySql. Dans MySql, "Existe" est une clause qui nécessite une opération telle que SELECT, UPDATE ou DELETE.

0 votes

@Steve La troisième option n'est pas portable.

86voto

Marc B Points 195501
SELECT count(*)
FROM information_schema.TABLES
WHERE (TABLE_SCHEMA = 'your_db_name') AND (TABLE_NAME = 'name_of_table')

si vous obtenez un compte non nul, la table existe.

2 votes

Je ne comprends vraiment pas ce qui s'est passé ici. J'ai vérifié les réponses, car je le fais maintenant, et il est vrai que la réponse de Sergio Tulentsevs était plus précoce (1 min) et proposait 3 solutions, mais celle-ci est la plus efficace. Pourquoi devrais-je sélectionner ce que je veux en plus ou en moins ? J'ai besoin d'un "booléen" 1/0 dans ce cas. Est-ce que la table existe ou non. Je ne veux pas tout limiter, je ne veux rien aimer, je ne veux pas d'erreurs. Ceci devrait être la réponse acceptée.

1 votes

Notez que sur un TEMPORARY TABLE ça ne marche pas.

18voto

doogle Points 2148

Vous pouvez interroger la base de données INFORMATION_SCHEMA tables vue du système :

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'testtable';

Si aucune ligne n'est retournée, alors la table n'existe pas.

15voto

csukcc Points 41

Voici un tableau qui n'est pas un SELECT * FROM

SHOW TABLES FROM `db` LIKE 'tablename'; //zero rows = not exist

J'ai obtenu ça d'un pro des bases de données, voici ce qu'on m'a dit :

select 1 from `tablename`; //avoids a function call
select * from INFORMATION_SCHEMA.tables where schema = 'db' and table = 'table' // slow. Field names not accurate
SHOW TABLES FROM `db` LIKE 'tablename'; //zero rows = does not exist

0 votes

Le plus simple et le plus efficace.

0 votes

Nous l'avons utilisé dans un bash script par exemple. if [[ $(mysql --execute "SHOW TABLES FROM ${DB_NAME} LIKE '${DB_PREFIX}options';") -gt 0 ]]; then stackoverflow.com/a/69889338/1718491

7voto

ta.speot.is Points 15157

Plutôt que de se fier aux erreurs, vous pouvez interroger INFORMATION_SCHEMA.TABLES pour voir si la table existe. S'il y a un enregistrement, elle existe. S'il n'y a pas d'enregistrement, elle n'existe pas.

1 votes

Ahh, maintenant on se rapproche ! Je vais aller essayer.

1 votes

@Steve : c'est toujours une SELECT FROM . :-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X