MySQL „CREATE TABLE IF NOT EXISTS“ -> Fehler 1050
-
22-07-2019 - |
Frage
Mit dem Befehl:
CREATE TABLE IF NOT EXISTS `test`.`t1` (
`col` VARCHAR(16) NOT NULL
) ENGINE=MEMORY;
Ausführen dieser zweimal im MySQL Query Browser führen zu:
Table 't1' existiert bereits Fehler 1050
Ich habe gedacht, dass Sie die Tabelle erstellen „IF NOT EXISTS“ keine Fehler werfen würde. Bin ich etwas fehlt oder ist das ein Fehler? Ich bin mit Version 5.1 . Danke.
Lösung
funktioniert gut für mich in 5.0.27
bekomme ich nur eine Warnung (kein Fehler), dass die Tabelle vorhanden ist;
Andere Tipps
Wie bereits erwähnt, ist es eine Warnung kein Fehler, aber (wenn man wie ich) Sie wollen die Dinge ohne Warnungen laufen, können Sie diese Warnung deaktivieren, dann wieder aktivieren wieder, wenn Sie fertig sind.
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
Sie können die folgende Abfrage verwenden, um eine Tabelle zu einer bestimmten Datenbank in MySql zu erstellen.
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`)
);
Ich habe eine Lösung für ein Problem, das Sie vielleicht auch zutreffen. Meine Datenbank war in einem Zustand, in dem ein DROP TABLE
schlug fehl, weil es nicht in die Tabelle gefunden ... aber ein CREATE TABLE
auch nicht, weil MySQL dachte die Tabelle vorhanden ist. (Dieser Zustand könnte leicht verwirren mit Ihrem IF NOT EXISTS-Klausel).
Ich fand schließlich dieser Lösung :
sudo mysqladmin flush-tables
Für mich ohne sudo
, bekam ich folgende Fehlermeldung:
mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'
(Laufen auf 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`)
);***
Ich hatte ein ähnliches Problem wie @CraigWalker auf debian: Meine Datenbank in einem Zustand war, wo ein DROP TABLE
schlug fehl, weil es nicht in der Tabelle gefunden, aber ein CREATE TABLE
auch nicht, weil MySQL die Tabelle noch gedacht existierte. So ist die gebrochene Tabelle noch existierte irgendwo obwohl es nicht da war, als ich in phpMyAdmin aussehen.
habe ich diesen Zustand nur durch den gesamten Ordner zu kopieren, die eine Datenbank mit einigen MyISAM
und einigen InnoDB
Tabellen
cp -a /var/lib/mysql/sometable /var/lib/mysql/test
(dies wird nicht empfohlen!)
Alle InnoDB-Tabellen, wo nicht sichtbar in der neuen Datenbank test
in phpMyAdmin.
sudo mysqladmin flush-tables
hat auch nicht geholfen.
Meine Lösung: Ich hatte die neue Testdatenbank mit drop database test
zu löschen und kopieren Sie sie mit mysqldump
statt:
mysqldump somedatabase -u username -p -r export.sql
mysql test -u username -p < export.sql
Wenn jemand diesen Fehler nach einem Export Phpmyadmin bekommen, die die benutzerdefinierten Optionen verwenden und die „Drop-Tabellen“ Aussagen dieses Recht geklärt.
Erstellen Sie MySQL-Verbindung mit dem Parameter folgen. " 'Raise_on_warnings': False". Es wird die Warnung ignorieren. z.
config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db', 'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)