2010-07-02 4 views
2

-edit2- 3hrs plus tard et ont toujours le même problème. J'utilise le paquet d'archive noinstall. -edit- peut-être que quelqu'un peut me dire une meilleure façon de vérifier si une table existe?problème mysql avec information_schema.tables

J'ai une fonction dans ma lib pour vérifier s'il existe une table que j'ai demandé comment faire dans le passé. J'ai supprimé ma base de données et l'ai créée à nouveau. Mon code n'a pas créé les tables correctement. Après le débogage j'ai décidé d'écrire ci-dessous.

mysql> SELECT table_schema, table_name FROM information_schema.tables WHERE tabl 
e_schema = 'mydb' AND table_name='ApprovePost'; 
+--------------+-------------+ 
| table_schema | table_name | 
+--------------+-------------+ 
| mydb   | ApprovePost | 
+--------------+-------------+ 
1 row in set (0.00 sec) 

Bizarre ... mydb a été abandonné et a créé à nouveau (je l'ai écrit drop database mydb; et create database mydb;. Il est parti?). Permet de savoir ce qui existe déclaration

mysql> SELECT table_schema, table_name FROM information_schema.tables WHERE tabl 
e_schema = 'mydb'; 
Empty set (0.00 sec) 

Non seulement je sais pas pourquoi la première montre tables qui est Wrecking mon code, je ne sais pas pourquoi cela ne montre pas toutes les tables (dans cette base de données).

note: Les bases de données doivent toutes être innodb. Aussi c'est une nouvelle installation de Windows et j'ai peut-être mal configuré quelque chose.


Bonus étrangeté.

mysql> drop database mydb; 
ERROR 1008 (HY000): Can't drop database 'mydb'; database doesn't exist 
mysql> SELECT table_schema, table_name FROM information_schema.tables WHERE tabl 
e_schema = 'mydb'; 
Empty set (0.00 sec) 

mysql> SELECT table_schema, table_name FROM information_schema.tables WHERE tabl 
e_schema = 'mydb' AND table_name='ApprovePost'; 
+--------------+-------------+ 
| table_schema | table_name | 
+--------------+-------------+ 
| mydb   | ApprovePost | 
+--------------+-------------+ 
1 row in set (0.00 sec) 
+0

On dirait que vous avez besoin d'utiliser la commande FLUSH de TABLES' pour les INFORMATION_SCHEMA.TABLES pour refléter les tables existantes: http://dev.mysql.com/ doc/refman/5.0/fr/table-cache.html –

+0

Merci OMG Ponies. Ça a marché! –

+1

Maintenant, pourquoi n'est-ce pas une réponse! ;) :RÉ. –

Répondre

6

Il semble que vous ayez besoin de la commande FLUSH TABLES pour que les tables INFORMATION_SCHEMA reflètent les tables existantes.

Référence:

0

Hmmm ... Les résultats sont-ils stables? Peut-être une transaction en cours .. ce qui est montré par

show tables like '%' 

En outre, il peut être un problème avec les fichiers physiques. Le dossier pour mydb existe-t-il?

+0

mysql> afficher les tables comme '%'; Ensemble vide (0.00 sec) - Je vérifie le fichier maintenant. Il est créé mais je vais supprimer et essayer un nouveau dossier. –

+0

toujours un problème. même dans l'ancienne version. Je me demande pourquoi je ne l'ai pas remarqué avant. Je me demande pourquoi c'est ce qu'il fait. –

+0

Quel est le résultat pour 'show database'? Le dossier mydb existe-t-il dans le dossier de données mysql? – burnall