web-dev-qa-db-fra.com

MySQL "CREATE TABLE IF NOT NOT EXISTS" -> Erreur 1050

En utilisant la commande:

CREATE TABLE IF NOT EXISTS `test`.`t1` (
    `col` VARCHAR(16) NOT NULL
) ENGINE=MEMORY;

Exécuter ceci deux fois dans le navigateur de requêtes MySQL a pour résultat:

La table 't1' existe déjà Erreur 1050

J'aurais pensé que la création de la table "IF NOT EXISTS" ne générerait pas d'erreur. Est-ce que je manque quelque chose ou est-ce un bug? Je suis en cours d'exécution version 5.1 . Merci.

45
user199559

Fonctionne bien pour moi dans 5.0.27

Je viens de recevoir un avertissement (pas une erreur) que la table existe;

39
Eli

Comme déjà indiqué, il s’agit d’un avertissement et non d’une erreur, mais (si comme moi) vous souhaitez que les choses s’exécutent sans avertissement, vous pouvez désactiver cet avertissement, puis le réactiver lorsque vous avez terminé.

SET sql_notes = 0;      -- Temporarily disable the "Table already exists" warning
CREATE TABLE IF NOT EXISTS ...
SET sql_notes = 1;      -- And then re-enable the warning again
22
gdt

Vous pouvez utiliser la requête suivante pour créer une table dans une base de données particulière dans MySql.

create database if not exists `test`;

USE `test`;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

/*Table structure for table `test` */

CREATE TABLE IF NOT EXISTS `tblsample` (

  `id` int(11) NOT NULL auto_increment,   
  `recid` int(11) NOT NULL default '0',       
  `cvfilename` varchar(250)  NOT NULL default '',     
  `cvpagenumber`  int(11) NULL,     
  `cilineno` int(11)  NULL,    
  `batchname`  varchar(100) NOT NULL default '',
  `type` varchar(20) NOT NULL default '',    
  `data` varchar(100) NOT NULL default '',
   PRIMARY KEY  (`id`)

);
4
Sachin Parse

J'ai une solution à un problème qui peut également s'appliquer à vous. Ma base de données était dans un état où un DROP TABLE a échoué car elle n'a pas pu trouver la table ... mais un CREATE TABLE a également échoué car MySQL pensait que la table existait. (Cet état pourrait facilement perturber votre clause IF NOT EXISTS).

J'ai finalement trouvé cette solution :

Sudo mysqladmin flush-tables

Pour moi, sans la Sudo, j'ai l'erreur suivante:

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

(Sous OS X 10.6)

2
Craig Walker

Si une personne obtient cette erreur après une exportation Phpmyadmin, l’utilisation des options personnalisées et l’ajout des instructions «supprimer des tables» permettent de résoudre ce problème. 

0
nizz0k

J'ai eu un problème similaire à @CraigWalker sur debian: Ma base de données était dans un état où un DROP TABLE a échoué car il n'a pas pu trouver la table, mais un CREATE TABLE a également échoué car MySQL pensait que la table existait toujours. Donc, la table cassée existait toujours quelque part, même si elle n'y était pas lorsque j'ai regardé dans phpmyadmin.

J'ai créé cet état en copiant tout le dossier qui contenait une base de données avec des tables MyISAM et InnoDB

cp -a /var/lib/mysql/sometable /var/lib/mysql/test

(ce n'est pas recommandé!)

Toutes les tables InnoDB n'étaient pas visibles dans la nouvelle base de données test dans phpmyadmin.

Sudo mysqladmin flush-tables n'a pas aidé non plus.

Ma solution: Je devais supprimer la nouvelle base de données de test avec drop database test et la copier avec mysqldump à la place:

mysqldump somedatabase -u username -p -r export.sql
mysql test -u username -p < export.sql
0
rubo77
create database if not exists `test`;

USE `test`;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

/*Table structure for table `test` */

***CREATE TABLE IF NOT EXISTS `tblsample` (
  `id` int(11) NOT NULL auto_increment,   
  `recid` int(11) NOT NULL default '0',       
  `cvfilename` varchar(250)  NOT NULL default '',     
  `cvpagenumber`  int(11) NULL,     
  `cilineno` int(11)  NULL,    
  `batchname`  varchar(100) NOT NULL default '',
  `type` varchar(20) NOT NULL default '',    
  `data` varchar(100) NOT NULL default '',
   PRIMARY KEY  (`id`)
);***
0
Balkishan