Pergunta

Usando o comando:

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

A execução deste duas vezes nos resultados do MySQL Query Browser em:

Table 't1' já existe Erro 1050

Eu teria pensado que criar a tabela "SE NÃO EXISTE" não jogaria erros. Estou faltando alguma coisa ou isso é um bug? Estou executando a versão 5,1 . Obrigado.

Foi útil?

Solução

funciona bem para mim em 5.0.27

Eu só receberá um aviso (não um erro) que a tabela existe;

Outras dicas

Como já foi dito, é um aviso não um erro, mas (se como eu) você quer que as coisas correr sem avisos, você pode desativar esse aviso, em seguida, reativá-lo novamente quando você está feito.

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

Você pode usar a seguinte consulta para criar uma tabela para um banco de dados específico em 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`)

);

Eu tenho uma solução para um problema que também pode se aplicar a você. Meu banco de dados estava em um estado onde um DROP TABLE falhou porque não foi possível encontrar a tabela ... mas um CREATE TABLE também falhou porque MySQL pensou existiu a mesa. (Este estado poderia facilmente mexer com a sua SE NÃO EXISTE cláusula).

Eu finalmente encontrei esta solução :

sudo mysqladmin flush-tables

Para mim, sem a sudo, eu tenho o seguinte erro:

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

(rodando no Mac 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`)
);***

Eu tive um problema semelhante como @CraigWalker no debian: Meu banco de dados estava em um estado onde um DROP TABLE falhou porque não foi possível encontrar a tabela, mas uma CREATE TABLE também falhou porque MySQL pensou a mesa ainda existia. Então a mesa quebrada ainda existia em algum lugar, embora ela não estava lá quando eu olhei no phpMyAdmin.

Eu criei este estado por apenas copiar toda a pasta que continha um banco de dados com algum MyISAM e algumas mesas InnoDB

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

(isso não é recomendado!)

tabelas Todos InnoDB onde não é visível no novo test banco de dados em phpmyadmin.

sudo mysqladmin flush-tables fez não quer ajudar.

Minha solução: Eu tive que excluir o novo banco de dados de teste com drop database test e copiá-lo com mysqldump vez:

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

Se alguém está recebendo este erro após uma exportação Phpmyadmin, usando o as opções personalizadas e adicionando as "mesas gota" declarações cancelou esta acima da direita.

Criar uma ligação mysql com seguinte parâmetro. " 'raise_on_warnings': Falso". Ele vai ignorar o aviso. por exemplo.

config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db',   'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top