Ir ao conteúdo

Erro ao alterar o tipo de uma coluna no mysql


lucas.fenix2010

Posts recomendados

Postado

Quando tento alterar uma chave primária com este comando:

ALTER TABLE table MODIFY codtable INT(20);

é retornado esse erro:

#1025 - Error on rename of ...

O que pode ser?

Lembrando que "codtable" é chave primária da table "table".

Postado
Você tem alguma chave estrangeira nessa tabela? Se sim, drope ela antes e depois tente alterar o nome dessa coluna.

Sim...de todas as chaves primárias que eu quero alterar elas são estrangeiras em outras tables.

exemplo table (codtable,nome) codtable primária.

teste (codteste,codtable,nome) codtable referencia codtable da tabela table.

No exemplo acima eu teria então que excluir o codtable da tabela teste pra depois alterar o tipo dela ?

Então eu teria que criar a chave estrangeira de novo depois de alterar o tipo?

Eu fiz o comando pra excluir a coluna que é chave estrangeira e o comando pra excluir a chave primária e mesmo assim deu erro.

ALTER TABLE funcionario DROP codsetor ;//codsetor é chave estrangeira da tabela setor.

ALTER TABLE setor DROP codsetor ;

Fiz esses dois comandos e a resposta foi:#1025 - Error on rename of ...

Postado

Olá, você terá que remover a chave estrangeira, ou seja, a ligação entre as tabelas

após isso faça seu ALTER TABLE em ambas tabelas

e depois, refaça a ligação, ou seja, refaça a constraint...

ALTER TABLE <table2> DROP FOREIGN KEY <nome_fk>
ALTER TABLE <table1> MODIFY <...>
ALTER TABLE <table2> MODIFY <...>

ALTER TABLE <table2> ADD CONSTRAINT <nome_fk> FOREIGN KEY(<nome_campo>) REFERENCES <table1>(<nome_campo>) ON DELETE CASCADE;

Postado
Olá, você terá que remover a chave estrangeira, ou seja, a ligação entre as tabelas

após isso faça seu ALTER TABLE em ambas tabelas

e depois, refaça a ligação, ou seja, refaça a constraint...

ALTER TABLE <table2> DROP FOREIGN KEY <nome_fk>
ALTER TABLE <table1> MODIFY <...>
ALTER TABLE <table2> MODIFY <...>

ALTER TABLE <table2> ADD CONSTRAINT <nome_fk> FOREIGN KEY(<nome_campo>) REFERENCES <table1>(<nome_campo>) ON DELETE CASCADE;

Quando eu executo o comando:

ALTER TABLE table2 DROP FOREIGN KEY <chaveestrangeira>;

Aparece esse erro: #1025 - Error on rename of...

Postado

O que eu postei não é o comando pronto, só enfatizei a situação

sendo <table1> sua tabela table

sendo <table2> sua tabela teste

mas tenta direto isso agora...

ALTER TABLE teste DROP FOREIGN KEY nome_fk_qualquer
ALTER TABLE table MODIFY <...>
ALTER TABLE teste MODIFY <...>

ALTER TABLE teste ADD CONSTRAINT nome_fk_qualquer FOREIGN KEY(codtable) REFERENCES table(codtable) ON DELETE CASCADE;

sendo nome_fk_qualquer o nome da sua chave estrangeira criada na tabela teste

caso não dê certo, retorne o RETORNO deste comando ^^

SHOW CREATE TABLE table;
SHOW CREATE TABLE teste;

E no último ALTER TABLE, eu SUPUS que sua tabela tava com DELETE CASCADE, senão tiver, é só tirar ^^

Postado

As tabelas que eu quero mexer:


Setor (codcoordenação,codcidade)
codcoordenaçãochave primária
codcidade chave estrangeira de uma tabela cidade

funcionario (codfuncionario,codcoordenação,nome)
codfuncionario chave primária
codcoordenação referencia codcoordenação da tabela Setor

Eu tentei excluir o codcoordenação da tabela funcionario com este código:

ALTER TABLE funcionario DROP FOREIGN KEY codcoordenação;                                                                                                

E retornou este erro:

#1025 - Error on rename of '.\banco@0020de@0020dados@00201\funcionario' to '.\banco@0020de@0020dados@00201\#sql2-770-2a' (errno: 152)

Eu tentei excluir o codcoordenação da tabela Setor com estes dois códigos:


ALTER TABLE setor DROP FOREIGN KEY codcoordenação;

ALTER TABLE setor DROP  codcoordenação;

E nos dois códigos é me retornado este erro:

#1025 - Error on rename of '.\banco@0020de@0020dados@00201\#sql-770_2e' to '.\banco@0020de@0020dados@00201\setor' (errno: 150)

Eu estou fazendo alguma coisa errada?

SHOW CREATE TABLE funcionario:

funcionario	CREATE TABLE `funcionario` (
`codfuncionario` varchar(10) COLLATE utf8_bin NOT NULL DEFAULT '',
`nome` varchar(30) COLLATE utf8_bin DEFAULT NULL,
`codcoordenação` varchar(10) COLLATE utf8_bin DEFAULT NULL,
`senha` int(20) DEFAULT NULL,
`usuario` varchar(30) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`codfuncionario`),
KEY `codcoordenação` (`codcoordenação`),
CONSTRAINT `funcionario_ibfk_1` FOREIGN KEY (`codcoordenação`) REFERENCES `setor` (`codcoordenação`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

SHOW CREATE TABLE setor:

setor	CREATE TABLE `setor` (
`codcoordenação` varchar(10) COLLATE utf8_bin NOT NULL DEFAULT '',
`codcampus` varchar(10) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`codcoordenação`),
KEY `codcampus` (`codcampus`),
CONSTRAINT `setor_ibfk_1` FOREIGN KEY (`codcampus`) REFERENCES `campus` (`codcampus`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

Postado

Olá, está fazendo errado sim ^^

O nome do campo, é codcoordenação, mas o nome dessa ligação, que é chamada FOREIGN KEY, é outro nome totalmente diferente.

FOREIGN KEY, UNIQUE KEY, PRIMARY KEY, são CONSTRAINTS, e cada CONSTRAINTS tem seu próprio nome.

Mas o que interessa é:

Pedi para retornar o SHOW CREATE TABLE das tabelas, pois este comando vai retornar o nome da CONSTRAINT FOREIGN KEY.

No caso da tabela funcionario, o nome da CONSTRAINT é "funcionario_ibfk_1"

No caso da tabela setor, o nome da CONSTRAINT é "setor_ibfk_1"

Procure esses nomes no retorno do SHOW CREATE TABLE, que aí você vai entender melhor.

Para você remover a chave estrangeira da tabela funcionario, o comando seria esse:

ALTER TABLE funcionario DROP FOREIGN KEY funcionario_ibfk_1

Ou seja, esta ação vai tirar a relação que existe da tabela funcionario com a tabela setor, esta ligação era feita por um chave estrangeira usando o campo codcoordenação.

Bom, após fazer isso, é só mudar o tipo de dados da forma que você pretende, e refazer a FOREIGN KEY novamente.

Para isso, utilize basicamente o comando que eu já passei, ou seja:

ALTER TABLE funcionario ADD CONSTRAINT funcionario_ibfk_1 FOREIGN KEY(codcoordenação) REFERENCES setor(codcoordenação) ;

Qualquer coisa, diga o porque está mudando o tipo do campo, qual o tipo que vai atribuir (VARCHAR, DOUBLE, INTE....) que aí eu ajudo se souber ^^

Espero ter ajudado, abraço.

Postado

Cara valeu mesmo.

Obrigadao cara.

Consegui fazer aqui.

Ufa até que enfim.

Eu fiz o que você falou:

1. Executei o código:

SHOW CREATE TABLE funcionario

2. Depois que vi o nome da constraint eu peguei esse nome e executei esse código:

ALTER TABLE funcionario DROP FOREIGN KEY <nome constraint>

3. Depois alterei o tipo das coluna na tabela setor e funcionario:


ALTER TABLE setor MODIFY codcoordenação INT (20);
ALTER TABLE funcionario MODIFY codcoordenação INT (20);

4. E por ultimo eu adicionei o nome da constraint de novo:

ALTER TABLE funcionario ADD CONSTRAINT funcionario_ibfk_1 FOREIGN KEY(codcoordenação) REFERENCES setor(codcoordenação) ;

Da primeira vez eu só mudei o tipo na tabela funcionario e quando fui tenatr adicionar a constraint não deu aí eu me liguei que tava com tipo diferente da coluna em setor e da coluna em funcionario.

Eu to mudando pra int pra eu ter a opção de incrementar o valor do código.

porque tipo a medida que for feito novos registro ao invés de colocar o codigo manualmente pode-se fazer uma incrementação automática.

Se tivesse em varchar não daria . ah não ser que tenha um método que converta de varchar para int,mas alterar mudando pra int acho q é mais fácil.

Essa constraint serve somente pra fazer a ligação ?

Nunca tinha ouvido falar de constraint.

Postado

Então, Constraint é uma Restrição.. (tradução)

A Foreign key, Chave estrangeira, é uma Restrição que você declara na tabela/campo

Bom, existe restrições a nível de campo e a nível de tabela, depois dá uma procurada para saber mais, mas basicamente, só serve pra te confundir, hehehe (pesquisa lá). ^^

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!