MySQL & # 8220; CREATE TABLE SI PAS EXISTS & # 8221; - > Erreur 1050
-
22-07-2019 - |
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.
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)