Question

Utilisation de la commande:

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

Si vous exécutez ceci deux fois dans le navigateur de requêtes MySQL, vous obtiendrez:

  

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

J'aurais pensé que la création de la table "SI NON EXISTE" ne jetterait pas les erreurs. Est-ce que je manque quelque chose ou est-ce un bug? J'utilise la version 5.1 . Merci.

Était-ce utile?

La solution

Fonctionne bien pour moi dans la version 5.0.27

Je viens d'obtenir un avertissement (et non une erreur) indiquant que la table existe;

Autres conseils

Comme déjà indiqué, il s’agit d’un avertissement, pas d’une erreur, mais (si comme moi) vous souhaitez que les choses s’exécutent sans avertissements, 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

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`)

);

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 le sudo , l'erreur suivante apparaît:

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

(sous OS X 10.6)

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`)
);***

J'avais un problème similaire à @CraigWalker sous 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’était pas là quand j’ai cherché dans phpmyadmin.

J'ai créé cet état en copiant simplement l'intégralité du dossier contenant une base de données contenant des MyISAM et des InnoDB tables

.
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 supprimer le test de base de données et la copier avec mysqldump à la place:

mysqldump somedatabase -u username -p -r export.sql
mysql test -u username -p < export.sql

Si quelqu'un rencontre cette erreur après une exportation Phpmyadmin, utilisez les options personnalisées et ajoutez le " tables supprimées " " les déclarations ont éclairci ce droit.

Créez une connexion mysql avec le paramètre suivant. "'raise_on_warnings' ': False". Il va ignorer l'avertissement. par exemple

config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db',   'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top