Mar 12
Digg
Stumbleupon
Technorati
Delicious

ERROR 1005: Can’t create table (errno: 121) - ErrorNr. 1005

Certa vez ocorreu esse erro quando um amigo restaurava backup do mysql e infelizmente não tinha muita coisa na web para auxiliar a resolver o erro. A mensagem de erro é bem clara LOL se você for um desenvolvedor do mysql rsrsrs…

Descobri depois de muita pesquisa que esse erro ocorre porque a query de criação da tabela possui uma CONSTRAINT que tem o mesmo nome de uma outra CONSTRAINT de alguma tabela existente no banco.

Para resolver isso é só alterar o nome de uma das CONSTRAINT :p

Bom, agora está mastigadinho para vocês :p


Author: Noel Rocha

23 Comments

dalton
August 15, 2009

gostei. resolveu meu problema.
mto obrigado

Fred
September 2, 2009

Estava passando por esse problema, nem imaginava que poderia ser isso.

Muito Obrigado.

Paulo
October 9, 2009

Me ajudou a resolver meu problema também.
Obrigado

noel
October 10, 2009

DNS primário: 200.149.55.142
DNS secundário: 200.165.132.154

Romilo Klement
October 24, 2009

Resolveu o meu problema.

Muito obrigado.

josue
March 14, 2010

Valeu demais!
Também resolveu o meu problema.

Obrigado!
:)

Carlos Novais
March 15, 2010

Opa, aqui também resolveu. \o/
Valew!

MMJ
July 9, 2010

Pessoas, uma solução bem rápida e prática para isso, sem precisar renomear CONSTRAINT.
Afinal, tem gente que não sabe o que é CONSTRAINT (eu sei!).

O erro abaixo pode acontecer quando você vai (re)criar uma tabela que é do tipo InnoDB.
Can’t create table ‘nomeDoBanco.nomeDaTabela’ (errno: 121).

Tabelas do tipo InnoDB somente são realmente necessárias se você vai utilizar transações.
Se você não precisa usar transações, ou não sabe o que é transações, commit e rollback (então realmente não precisa de InnoDB), prefira usar tabelas do tipo padrão MyIsam, que são muito mais rápidas e ocupam menos espaço em disco, justamente por não utilizarem recursos de transações.
E antes que alguém diga que estou errado… não sou eu que estou inventando, está no manual do MySQL, veja no capítulo 7.
Se não concorda discuta com a Oracle. Sim, a Oracle! Não sabia que a Oracle comprou o MySQL ?!?

Enfim… voltando ao assunto…

Explicite na instrução SQL que cria a sua tabela que você quer usar o tipo MyISAM.
Calma, depois você poderá voltar ao InnoDB (se necessário).

O código para instruir a criar usando MyIsam é algo como:
DROP TABLE IF EXISTS `minhaTabela`;
CREATE TABLE IF NOT EXISTS `minhaTabela` (
`id` int(11) NOT NULL ,
`nome` varchar(100) NOT NULL
PRIMARY KEY (`id`)
) TYPE=MyIsam;

Se você não precisa de InnoDB… Pronto!!!
Apenas fazendo isso você já vai ver que a tabela foi criada e já é possível trabalhar com ela.

Mas se você precisa de InnoDB, ainda tem mais uma coisa a ser feita, alterar a tabela de volta para o tipo InnoDB.
Para isso basta usar o comando ALTER TABLE, assim:
ALTER TABLE `minhaTabela` ENGINE = InnoDB;

Possivelmente você vai receber um erro, com uma mensagem semelhante a essa:
/* SQL Error: Error on rename of ‘.\nomeDoBanco\#sql-618_15′ to ‘.\nomeDoBanco\minhaTabela’ (errno: 121) */

Palma, palma, não priemos cânico… basta executar o mesmo comando novamente ;)
ALTER TABLE `minhaTabela` ENGINE = InnoDB;

Zé fini !!
Agora sua tabela é novamente InnoDB e você pode usar transações e usufruir da maior segurança de dados que o InnoDB oferece.
E não é só isso… futuramente não precisa mais realizar este procedimento todo, pois o MySQL já vai ter corrigido internamente as parada do bicho que precisava corrigir e já é!

MMJ
@camp_brasileiro

Fernando
August 18, 2010

Valeu, ajudou em 5 horas de quebra-cabeça.

Flavio
September 1, 2010

Muito obrigado, resolveu o meu problema!!

Jango
October 23, 2010

lol ai sim!! tava ficando doido aqui ja

Lisandro
October 29, 2010

Loko, valeu…
Obs.: Tá dificil trabalhar com o Mysql Workbench

Cleber
November 17, 2010

Parabéns pelo artigo Noel. Ótima dica, resolveu o problema!

Augusto
February 21, 2011

Cara não tenho nem como agradecer, sem palavras mesmo, e pensar que no Forum do MySql não achei porra nenhuma pra me ajudar, o Mysql Workbench dá umas no saco que eu vou te falar.

Igor Gripp
March 30, 2011

Muito bem observador, tava com mesmo problema é não sabia nem da onde vinha o erro. Muito Obrigado. :D

Clayton
May 14, 2011

Show de bola! Resolveu meu problema!

barbosa
June 1, 2011

vlw pela dica!

Lenardo
August 3, 2011

Muito obrigado. Excelente dica!!!

Henrique Caixeta
August 17, 2011

Obrigado.

Richard
September 20, 2011

Incrível, resolveu num “passe de mágica”.
Obrigado :)

Richard
September 20, 2011

hahaha.
Grande Noel!! Até aqui …

Lorena
November 14, 2011

vlw foi muito útil!!!

Ota
February 6, 2012

Dica muito top. Parabéns.

Comments RSS TrackBack Identifier URI

Leave a comment