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