MySQL "créer une TABLE si elle N'existe pas" - > erreur 1050

utilisant la commande:

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

L'exécution de ce double dans le navigateur de requête MySQL aboutit à:

Table " t1 "existe déjà erreur 1050

j'aurais pensé que la création de la table" IF NOT EXISTS " ne lancerait pas d'erreurs. Est-ce que je manque quelque chose ou est-ce un bug? J'exécute la version 5.1 . Grâce.

42
demandé sur Adam Wagner 2009-10-30 19:39:20

7 réponses

fonctionne très bien pour moi dans 5.0.27

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

36
répondu Eli 2009-10-30 16:47:21

comme déjà dit, c'est un avertissement, pas une erreur, mais (si comme moi) vous voulez que les choses tournent sans avertissements, vous pouvez désactiver cet avertissement, puis le réactiver quand 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
répondu gdt 2010-08-08 12:33:22

vous pouvez utiliser la requête suivante pour créer une table à 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`)

);
3
répondu Sachin Parse 2015-12-18 07:52:28

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é parce qu'il ne pouvait pas trouver la table... mais un CREATE TABLE a également échoué parce que MySQL pensait que la table existait. (Cet État pourrait facilement jouer avec votre clause "IF NOT EXISTS").

j'ai finalement trouvé cette solution :

sudo mysqladmin flush-tables

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

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

(tournant sur OS X 10.6)

2
répondu Craig Walker 2010-11-23 00:05:05

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é parce qu'il ne pouvait pas trouver la table, mais un CREATE TABLE a également échoué parce que MySQL pensait que la table existait toujours. Donc la table cassée existait toujours quelque part bien qu'elle n'était pas là quand j'ai regardé dans phpmyadmin.

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

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

(ceci n'est pas recommandé!)

Toutes les tables InnoDB où elles ne sont pas visibles dans la nouvelle base de données test dans phpmyadmin.

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

Ma solution: j'ai dû supprimer la nouvelle base de données de test avec drop database test et le copier avec mysqldump au lieu de:

mysqldump somedatabase -u username -p -r export.sql
mysql test -u username -p < export.sql
0
répondu rubo77 2017-06-22 04:30:00
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
répondu Balkishan 2018-06-02 05:21:30

crée une connexion mysql avec le paramètre suivant. "'raise_on_warnings': False". Il ignorera l'avertissement. par exemple

config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db',   'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)
-1
répondu Vinay 2014-02-08 10:25:12