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

8 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

Comments RSS TrackBack Identifier URI

Leave a comment