Domanda

Utilizzando il comando:

CREATE TABLE IF NOT EXISTS `test`.`t1` (
    `col` VARCHAR(16) NOT NULL
) ENGINE=MEMORY;

Eseguendolo due volte nel MySQL Query Browser si ottiene:

  

La tabella 't1' esiste già errore 1050

Avrei pensato che la creazione della tabella "SE NON ESISTE" non genererebbe errori. Mi sto perdendo qualcosa o è un bug? Sto eseguendo la versione 5.1 . Grazie.

È stato utile?

Soluzione

Funziona bene per me in 5.0.27

Ho appena ricevuto un avviso (non un errore) che la tabella esiste;

Altri suggerimenti

Come già detto, è un avviso non un errore, ma (se come me) vuoi che le cose funzionino senza avvisi, puoi disabilitare quell'avviso, quindi riattivarlo nuovamente quando hai finito.

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

È possibile utilizzare la seguente query per creare una tabella in un determinato database in 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`)

);

Ho una soluzione a un problema che potrebbe applicarsi anche a te. Il mio database era in uno stato in cui un DROP TABLE non è riuscito perché non è stato possibile trovare la tabella ... ma un CREATE TABLE non è riuscito perché MySQL pensava che la tabella esistesse. (Questo stato potrebbe facilmente interferire con la clausola IF NOT EXISTS).

Alla fine ho trovato questa soluzione :

sudo mysqladmin flush-tables

Per me, senza il sudo , ho ricevuto il seguente errore:

mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'

(In esecuzione su 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`)
);***

Ho avuto un problema simile a @CraigWalker su debian: il mio database era in uno stato in cui DROP TABLE non è riuscito perché non è stato possibile trovare la tabella, ma CREATE TABLE fallito anche perché MySQL pensava che la tabella esistesse ancora. Quindi il tavolo rotto esisteva ancora da qualche parte anche se non era lì quando ho guardato in phpmyadmin.

Ho creato questo stato semplicemente copiando l'intera cartella che conteneva un database con alcune tabelle MyISAM e alcune tabelle InnoDB

cp -a /var/lib/mysql/sometable /var/lib/mysql/test

(questo non è raccomandato!)

Tutte le tabelle InnoDB non erano visibili nel nuovo database test in phpmyadmin.

Anche

sudo mysqladmin flush-tables non ha aiutato.

La mia soluzione: ho dovuto eliminare il nuovo database di test con drop test database e copiarlo con mysqldump invece:

mysqldump somedatabase -u username -p -r export.sql
mysql test -u username -p < export.sql

Se qualcuno sta riscontrando questo errore dopo un'esportazione di Phpmyadmin, usando le opzioni personalizzate e aggiungendo le tabelle di " drop " le dichiarazioni hanno chiarito questo.

Crea una connessione mysql con il seguente parametro. " 'raise_on_warnings': False " ;. Ignorerà l'avvertimento. per es.

config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db',   'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top