77 votes

Mysql 1050 Erreur "Table existe déjà" alors qu'en réalité, ce n'est pas le cas

Je suis en train d'ajouter cette table :

CREATE TABLE contenttype (
        contenttypeid INT UNSIGNED NOT NULL AUTO_INCREMENT,
        class VARBINARY(50) NOT NULL,
        packageid INT UNSIGNED NOT NULL,
        canplace ENUM('0','1') NOT NULL DEFAULT '0',
        cansearch ENUM('0','1') NOT NULL DEFAULT '0',
        cantag ENUM('0','1') DEFAULT '0',
        canattach ENUM('0','1') DEFAULT '0',
        isaggregator ENUM('0', '1') NOT NULL DEFAULT '0',
        PRIMARY KEY (contenttypeid),
        UNIQUE KEY packageclass (packageid, class)
);

Et je reçois une erreur 1050 "table exists déjà"

Mais la table n'existe PAS. Des idées ?

MODIFIER : plus de détails parce que tout le monde semble ne pas me croire :)

DESCRIBE contenttype

affiche :

1146 - La table 'gunzfact_vbforumdb.contenttype' n'existe pas

et

CREATE TABLE gunzfact_vbforumdb.contenttype(
contenttypeid INT UNSIGNED NOT NULL AUTO_INCREMENT ,
class VARBINARY( 50 ) NOT NULL ,
packageid INT UNSIGNED NOT NULL ,
canplace ENUM( '0', '1' ) NOT NULL DEFAULT '0',
cansearch ENUM( '0', '1' ) NOT NULL DEFAULT '0',
cantag ENUM( '0', '1' ) DEFAULT '0',
canattach ENUM( '0', '1' ) DEFAULT '0',
isaggregator ENUM( '0', '1' ) NOT NULL DEFAULT '0',
PRIMARY KEY ( contenttypeid ) ,

affiche :

1050 - La table 'contenttype' existe déjà

5 votes

Comment déterminez-vous que cela n'existe pas déjà?

1 votes

Êtes-vous dans la base de données dans laquelle vous avez l'intention de créer la table? De plus, essayez d'exécuter DESCRIBE contenttype et voyez si elle existe réellement.

1 votes

Qu'est-ce qui te fait être si sûr(e) que cela n'existe pas ?

79voto

NullUserException Points 42268

On dirait que vous avez la table de Schrödinger...

Maintenant sérieusement, vous avez probablement une table cassée. Essayez:

  • DROP TABLE IF EXISTS contenttype
  • REPAIR TABLE contenttype
  • Si vous avez les autorisations nécessaires, supprimez les fichiers de données (dans /mysql/data/nom_bdd)

2 votes

> REPAIR TABLE contenttype USE_FRM produit gunzfact_vbforumdb.contenttype réparer Erreur Impossible d'ouvrir la table gunzfact_vbforumdb.contenttype réparer statut L'opération a échoué Nous nous rapprochons, mais il n'y a toujours pas de résolution. Je ne sais pas si les données sont nécessaires dans la table, y a-t-il un autre moyen de la réparer ? J'ai aussi essayé d'exécuter un myisamchk sans succès.

0 votes

Peut accéder aux fichiers *.myi, *.myd, *.frm des tables?

0 votes

@Citoyen Ce sont les fichiers réels où les données de table et les informations de structure sont stockées. Ils se trouvent généralement quelque part dans le répertoire mysql.

34voto

wredny Points 141

Du journal MySQL :

InnoDB: Vous pouvez supprimer la table orpheline à l'intérieur d'InnoDB en
InnoDB: créant une table InnoDB avec le même nom dans un autre
InnoDB: base de données et en copiant le fichier .frm dans la base de données actuelle.
InnoDB: Ensuite, MySQL pense que la table existe et DROP TABLE va
InnoDB: réussir.

1 votes

Cela a fonctionné pour moi. Mais je dois répéter pour toutes les tables de ma base de données.

0 votes

Oui, il semble que cela puisse être causé par le changement d'une table InnoDB en MyISAM en utilisant ALTER TABLE ** moteur MyISAM. mysqlhotcopy aurait pu être impliqué dans la création de mon problème également, car il ne fonctionne pas avec les tables InnoDB et celle-ci pourrait encore avoir été InnoDB lorsque j'ai exécuté la commande pour la première fois.

1 votes

Ne fonctionne pas pour moi...La table n'existe toujours pas même si j'ai maintenant des fichiers *.frm et *.ibd valides.

15voto

Craig Walker Points 13478

J'ai obtenu cette même erreur, et REPAIR TABLE (de la réponse de @NullUserException) n'a pas aidé.

J'ai finalement trouvé cette solution:

sudo mysqladmin flush-tables

Pour moi, sans le sudo, j'ai obtenu l'erreur suivante:

mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'

(En cours d'exécution sur OS X 10.6)

1 votes

Merci, sudo mysqladmin flush-tables a résolu le problème pour moi.

14voto

Joe Chryst Points 71

Vous devrez peut-être vider le cache de la table. Par exemple :

DROP TABLE IF EXISTS `nom_table` ;
FLUSH TABLES `nom_table` ; /* ou excluez `nom_table` pour vider toutes les tables */
CREATE TABLE `nom_table` ...

1 votes

Merci, tu m'as sauvé, d'une manière ou d'une autre mon schema s'est corrompu (je n'ai pas pu le supprimer) donc j'ai supprimé tous les fichiers mais continuais à obtenir la même erreur jusqu'à ce que j'essaie ceci

0 votes

N'oubliez pas de redémarrer vos services SQL.

0 votes

Travailler pour moi!

4voto

Neal Points 41

J'ai lutté avec ça toute la journée : J'ai un script Perl qui construit un ensemble de tables en commençant par faire un DROP IF EXISTS ... dessus puis en les CREATE. Le DROP a réussi, mais lors du CREATE j'ai eu ce message d'erreur : table already exists

J'ai finalement trouvé la solution : La nouvelle version de MySQL que j'utilise a un moteur par défaut de InnoDB ("show engine \G;") J'ai modifié cela dans le fichier my.cnf pour qu'il soit par défaut MyISAM, redémarré MySQL, et maintenant je n'ai plus l'erreur "table already exists".

0 votes

N'a pas fonctionné pour moi. J'ai changé le moteur MySQL global de InnoDB à MyISAM - même problème pour existe/n'existe pas. Serveur MySQL tournant sous Windows 2003.

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