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.

War es hilfreich?

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

enthalten
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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top