Pergunta

Estou adicionando esta tabela:

CREATE TABLE contenttype (
        contenttypeid INT UNSIGNED NOT NULL AUTO_INCREMENT,
        class VARBINARY(50) NOT NULL,
        packageid INT UNSIGNED NOT NULL,
        canplace ENUM('0','1') NOT NULL DEFAULT '0',
        cansearch ENUM('0','1') NOT NULL DEFAULT '0',
        cantag ENUM('0','1') DEFAULT '0',
        canattach ENUM('0','1') DEFAULT '0',
        isaggregator ENUM('0', '1') NOT NULL DEFAULT '0',
        PRIMARY KEY (contenttypeid),
        UNIQUE KEY packageclass (packageid, class)
);

E recebo uma "tabela já existe" 1050

Mas a tabela NÃO existe.Alguma ideia?

EDITAR:mais detalhes porque todo mundo parece não acreditar em mim :)

DESCRIBE contenttype

rendimentos:

1146 - A tabela 'gunzfact_vbforumdb.contenttype' não existe

e

CREATE TABLE gunzfact_vbforumdb.contenttype(
contenttypeid INT UNSIGNED NOT NULL AUTO_INCREMENT ,
class VARBINARY( 50 ) NOT NULL ,
packageid INT UNSIGNED NOT NULL ,
canplace ENUM( '0', '1' ) NOT NULL DEFAULT '0',
cansearch ENUM( '0', '1' ) NOT NULL DEFAULT '0',
cantag ENUM( '0', '1' ) DEFAULT '0',
canattach ENUM( '0', '1' ) DEFAULT '0',
isaggregator ENUM( '0', '1' ) NOT NULL DEFAULT '0',
PRIMARY KEY ( contenttypeid ) ,

Rendimentos:

1050 - A tabela ‘contenttype’ já existe

Foi útil?

Solução

Parece que você tem Mesa de Schroedinger...

Sério, você provavelmente tem uma mesa quebrada.Tentar:

  • DROP TABLE IF EXISTS contenttype
  • REPAIR TABLE contenttype
  • Se você tiver permissões suficientes, exclua os arquivos de dados (em /mysql/data/db_name)

Outras dicas

do registro do MySQL:

InnoDB: You can drop the orphaned table inside InnoDB by
InnoDB: creating an InnoDB table with the same name in another
InnoDB: database and copying the .frm file to the current database.
InnoDB: Then MySQL thinks the table exists, and DROP TABLE will
InnoDB: succeed.

Recebi o mesmo erro e REPAIR TABLE (da resposta de @NullUserException) não ajudou.

Eu finalmente encontrei esta solução:

sudo mysqladmin flush-tables

Para mim, sem o sudo, recebi o seguinte erro:

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

(Executando no OS X 10.6)

Talvez seja necessário liberar o cache da tabela.Por exemplo:

DROP TABLE IF EXISTS `tablename` ;
FLUSH TABLES `tablename` ; /* or exclude `tablename` to flush all tables */
CREATE TABLE `tablename` ...

Eu tenho lutado com isso o dia todo:Eu tenho um script Perl que constrói um conjunto de tabelas fazendo primeiro um DROP IF EXISTS ... neles e então CREATEcom eles.O DROP conseguiu, mas em CREATE Recebi esta mensagem de erro: table already exists

Finalmente cheguei ao fundo da questão:A nova versão do MySQL que estou usando tem um mecanismo padrão do InnoDB ("show engine \G;") Eu mudei no arquivo my.cnf para o padrão MyISAM, reiniciei o MySQL e agora não consigo mais o erro "tabela já existe".

O mesmo problema ocorreu comigo ao criar uma visualização.A visualização estava presente antes devido a algumas alterações, ela foi removida. Mas quando tentei adicioná-la novamente, ele me mostrou a mensagem de erro "a visualização já existe".

Solução:

Você pode fazer uma coisa manualmente.

  1. Vá para a pasta MySQL onde você o instalou
  2. Vá para a pasta de dados dentro dela.
  3. Escolha seu banco de dados e entre nele.
  4. Banco de dados cria arquivos no formato ".frm".
  5. exclua o arquivo da tabela específica.
  6. Agora crie a tabela novamente.

Isso criará a tabela com sucesso.

Encontrando o mesmo problema (criar tabela InnoDB), foi isso que finalmente funcionou para mim:

DROP DATABASE `having_issues`;

Verifiquei os arquivos, as permissões, tentei REPARAR e FLUSH, mas nada funcionou.

Então se esta for uma opção, mova todas as tabelas de trabalho para outro BANCO DE DADOS, descarte o antigo (talvez seja necessário remover manualmente todos os arquivos da pasta do banco de dados antes de começar a trabalhar), renomeie o novo e você 'deveria' voltar ao seu caminho.Aparentemente, tudo o que é 'armazenado em cache' usando o InnoDB é descartado junto com o banco de dados original.

Eu tive esse problema no Win7 no Sql Maestro para MySql 12.3.Extremamente irritante, na verdade um empecilho.Nada ajudou, nem mesmo descartar e recriar o banco de dados.Eu tenho essa mesma configuração no XP e funciona lá, então depois de ler suas respostas sobre permissões percebi que deve estar relacionado às permissões do Win7.Então rodei o MySql como administrador e mesmo rodando o Sql Maestro normalmente o erro desapareceu.Portanto, deve ter sido um problema de permissão entre o Win7 e o MySql.

Também encontrei esse problema em que tentar criar uma tabela dizia que ela já existia e descartar a tabela dizia que ela não existia.

Eu fiz "FLUSH TABLES" e resolveu o problema.

Estou lutando com o mesmo problema.Não consigo criar uma tabela, mesmo que ela não exista.Tentei todas as soluções acima sem sucesso.

Minha solução foi deletar os arquivos ib_logfil0, ib_logfile1, ibdata1, e auto.cnf da pasta de dados do MySQL;certifique-se de interromper o serviço MySQL antes de excluir esses arquivos.

Depois de reiniciar o serviço, o MySQL recriou esses arquivos e eu consegui executar um script de backup onde todos eram meus CREATEs foram armazenados (um arquivo sqldump).

Primeiro verifique se você está no banco de dados correto USE yourDB e tentar Select * from contenttype só para ver o que é e se realmente existe...

Eu tive o mesmo problema no Mac OS X e no MySQL 5.1.40.Usei o Eclipse para editar meu script SQL e tentei o MySQLWorkbench 5.2.28.Provavelmente converteu caracteres de nova linha para o formato Mac.Eu não tinha ideia do que havia de errado com meu script até comentar a primeira linha do arquivo.Depois disso este script foi interpretado pelo mysql como um único comentário.Usei o aplicativo TextEdit Mac integrado para corrigir isso.Depois que as quebras de linha foram convertidas para o formato correto, o erro 1050 desapareceu.

Atualização para usuários do Eclipse:

Para configurar o final padrão para novos arquivos criados em todo o espaço de trabalho:

Janela -> Preferências -> Geral -> Espaço de Works -> Novo delimitador de linha de arquivo de texto.

Para converter arquivos existentes, abra o arquivo para edição e para o arquivo atualmente editado, vá ao menu:

Arquivo -> Converter delimitadores de linha para

Eu tive esse mesmo caso.O problema acabou sendo permissões no diretório pai.

Eu estava copiando arquivos dentro e fora do mysql durante os testes.

drwx------   3 _mysql  wheel 

não bastava, precisava ser:

-rw-rw----   3 _mysql  wheel 

Desculpe ressuscitar.

Eu estava tendo grandes problemas com os erros 1050 e 150.

O problema, para mim, era que eu estava tentando adicionar uma restrição com ON DELETE SET NULL como uma das condições.

Mudando para ON DELETE NO ACTION me permitiu adicionar as restrições FK necessárias.

Infelizmente, as mensagens de erro do MySql são totalmente inúteis, então tive que encontrar essa solução iterativamente e com a ajuda das respostas à pergunta acima.

Eu tive esse mesmo problema e parece que o nome do banco de dados diferenciava maiúsculas de minúsculas.Meu banco de dados se chama:

Mydatabase

Embora meu roteiro incluísse

USE mydatabase

Depois que mudei o nome do banco de dados para o caso correto, tudo pareceu funcionar.Usando o MYSQL Workbench no MAC OSX

Este problema também ocorre se existir uma 'visualização' (tabela imaginária) no banco de dados com o mesmo nome do nosso novo nome de tabela.

No meu caso, descobri que isso é um problema com o InnoDB;Eu nunca descobri qual era o problema real, mas criar como MyISAM permitiu que ele fosse construído

Para mim, o problema foi causado ao usar uma cópia do sistema de arquivos do diretório do banco de dados mysql em vez do mysqldump.Eu tenho algumas tabelas muito grandes, principalmente MyISAM e algumas tabelas de cache InnoDB e não é prático mysqldump os dados.Como ainda estamos executando o MyISAM, o XtraBackup não é uma opção.

Os mesmos sintomas acima aconteceram comigo.A tabela não está lá, não há arquivos no diretório que pertençam à tabela, mas ela não pode ser criada porque o MySQL pensa que está lá.Drop table diz que não está lá, create table diz que está.

O problema ocorreu em duas máquinas, ambas foram corrigidas com a cópia de backups.No entanto, notei que em meu backup havia um arquivo .MYD e .MYI, embora eu tivesse a impressão de que esses arquivos não são usados ​​para InnoDB.Os arquivos .MYD e .MYI tinham um proprietário root, enquanto o .frm era propriedade do mysql.

Se você copiar do backup, verifique as permissões do arquivo.As tabelas liberadas podem funcionar, mas optei por desligar e reiniciar o banco de dados.

Boa sorte.

meu Deus, eu tive o mesmo problema com osCommerce instale o script até descobrir que o sistema mysql tem muitos bancos de dados e o create table a consulta se copia em cada um e, portanto, eliminar apenas a tabela de trabalho no banco de dados ativo não ajudou, tive que eliminar a tabela de todos os bancos de dados

Minha instrução CREATE fazia parte do teste de despejo de ambiente.

Eu tentei tudo o que foi mencionado acima.NÃO consegui solução.No entanto, meu caminho para a redenção foi:

  1. Me deparo com o fato de que (uma das muitas) a instrução CREATE foi aprovada quando retifiquei a distinção entre maiúsculas e minúsculas do nome do banco de dados.Isso clicou em alguma coisa.Repeti o mesmo para as outras tabelas.

  2. No entanto, um novo erro entrou em cena.As aspas diretas para 'comentários' geravam erros de sintaxe.Fiquei chocado.substituí-los, mas o novo erro começou a aparecer.Finalmente eu sabia a solução.

SOLUÇÃO:O dump que eu estava usando pode ser de uma versão diferente do MySql.Obtive permissão para me conectar ao MYsql de teste usando o ambiente de trabalho mysql local (instalado em minha máquina).Eu não fiz rdp no servidor de teste para fazer login no ambiente de trabalho mysql de teste.Criei um despejo a partir daí.Executei o despejo e funcionou como um doce.

Estava tentando importar um arquivo sql de backup, mas estava recebendo o erro;1050 "A tabela já existe"

Minha configuração foi:

  • Janelas 7
  • MySQL 5.5.16

Solução:

  1. Mudou o mecanismo do servidor de InnoDB para MyISAM
  2. Usando o phpMyAdmin Excluiu o banco de dados para o qual estava tentando importar
  3. Reiniciei o serviço mysql
  4. Tentei a reimportação e funcionou

Seu disco também pode estar cheio.(só tive isso)

No meu caso o problema era que havia uma view com o mesmo nome da minha tabela, então tive que abandonar a view para permitir que a importação continuasse.

drop view `my-view-that-has-same-name-as-table`;

Uma solução automatizada que funcionou para mim é substituir a tabela drop normal por este sed durante o dump para também eliminar quaisquer visualizações que possam existir:

mysqldump my-db \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
| mysql my-other-db

Ou se você preferir imprimir em um arquivo para backup

mysqldump my-db \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
> my-db.dump.sql

Ou se você recebeu o arquivo despejado e está importando-o para o seu banco de dados

cat my-db.dump.sql \
| sed -E 's/^DROP TABLE IF EXISTS(.+)$/\0 DROP VIEW IF EXISTS\1/g' \
| mysql my-other-db

Você entendeu a ideia

Observação:é importante que você adicione o ^ no início da regex de substituição, porque existem outros tipos de DROP TABLE IF EXISTS comandos em dumps que você não deseja tocar.

Você deixa de ter algo assim:

--
-- Table structure for table `my_table`
--

DROP TABLE IF EXISTS `my_table`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `my_table` (
...

Para ter algo assim:

--
-- Table structure for table `my_table`
--

DROP TABLE IF EXISTS `my_table`; DROP VIEW IF EXISTS `my_table`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `my_table` (
...

Você não vai acreditar em mim!Acabei de remover um bloco de comentários do meu arquivo .sql e agora funciona.

CREATE DATABASE  IF NOT EXISTS `issga` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `issga`;
--
-- Table structure for table `protocolo`
--

DROP TABLE IF EXISTS protocolo;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
 CREATE TABLE protocolo (
  `idProtocolo` int(11) NOT NULL AUTO_INCREMENT,
  `tipo` varchar(30) DEFAULT NULL,
  `estado` int(2) DEFAULT 0,
  PRIMARY KEY (`idProtocolo`)
 ) ENGINE=InnoDB AUTO_INCREMENT=142 DEFAULT CHARSET=utf8;
 /*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `protocolo`
--

LOCK TABLES protocolo WRITE;
/*!40000 ALTER TABLE protocolo DISABLE KEYS */;
/* INSERT INTO `protocolo` VALUES () */
/*!40000 ALTER TABLE protocolo ENABLE KEYS */;
UNLOCK TABLES;

O bloco de comentários excluído foi este:

--
-- Table structure for table `protocolo`
-- 

Deixei a tabela problemática sozinha no mesmo arquivo .sql.Depois que removi os comentários, sobrou apenas o código e o erro desapareceu.

Acabei de receber o mesmo erro, mas sabia que a tabela já existia e queria adicioná-la.Estou adicionando minha resposta, pois esta pergunta surge como número 1 para mim no Google ao procurar o mesmo erro, mas para um cenário um pouco diferente.Basicamente eu precisava marcar

"Adicionar instrução DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER"

E isso resolveu o erro para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top