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.
Fonctionne bien pour moi dans 5.0.27
Je viens de recevoir un avertissement (pas une erreur) que la table existe;
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
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 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)
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.
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
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`)
);***