Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

LIGAÇÃO ENTRE TABELAS

DURANTE A AULA O PROFESSOR FEZ UMA LIGAÇÃO ENTRE COLUNAS DAS TABELAS POR MEIO DO CÓDIGO:

ALTER TABLE TABELA_DE_VENDAS ALTER FK_VENDEDORES FOREIGN KEY(MATRICULA) REFERENCES VENDEDORES(MATRICULA);

SE EU ERRAR ESSA LIGAÇÃO E QUISER ALTERAR AS COLUNAS RELACIONADAS COMO FAÇO? DIGAMOS QUE EU TENHA FEITO

ALTER TABLE TABELA_DE_VENDAS ALTER FK_VENDEDORES FOREIGN KEY(CPF) REFERENCES VENDEDORES(MATRICULA)

E AGORA QUERO MUDAR PARA MATRICULA/MATRICULA.

2 respostas
solução!

Oi Leonardo, tudo bem?

Quando criamos uma chave estrangeira no MySQL, automaticamente é criado uma Index. Sabendo isso, vamos analisar a criação das duas chaves estrangeiras: FK_CLIENTES e FK_VENDEDORES.

ALTER TABLE TABELA_DE_VENDAS ADD CONSTRAINT FK_CLIENTES
FOREIGN KEY (CPF) REFERENCES CLIENTES (CPF);

Repare que, para criar essa FK, foi utilizado a tabela CPF, certo?

Verifique na imagem abaixo, que foi criado a chave estrangeira e o index, até aqui está tudo certo.

FK_Clientes.

Agora vamos ver a criação da FK_Vendedores, que foi a forma que você fez:

ALTER TABLE TABELA_DE_VENDAS ADD CONSTRAINT FK_VENDEDORES
 FOREIGN KEY(CPF) REFERENCES VENDEDORES(MATRICULA)

Note que, também foi utilizado a tabela CPF para criar essa FK. Ele cria a chave estrangeira só que, ao invés de criar uma nova index, ele sobrescreve a existente, confira na imagem abaixo:

FK_VENDEDORES

Certo, agora vamos para o processo de ajustar a chave estrangeira:

Não podemos simplesmente fazer outro ALTER TABLE pra ajustar o campo, porque como a chave estrangeira já existe, vai acusar que não pode ter chaves com nomes iguais. Então, precisaremos deletar a FK e criar a correta:

ALTER TABLE TABELA_DE_VENDAS DROP FOREIGN KEY FK_VENDEDORES;

Porém, não basta apenas deletar a FK, teremos que deletar também o index.

ALTER TABLE TABELA_DE_VENDAS DROP INDEX FK_VENDEDORES;

Mas, não vai dar certo, vai retornar o seguinte erro: "Error Code: 1553. Cannot drop index 'FK_VENDEDORES': needed in a foreign key constraint"

Lembra que eu falei ali em cima que a index foi sobrescrita? Então, teremos que deletar também a FK_CLIENTES para poder deletar o index.

ALTER TABLE TABELA_DE_VENDAS DROP FOREIGN KEY FK_CLIENTES;

Após deletar a FK_CLIENTES, conseguimos deletar o index, verifique a imagem abaixo:

Index Deletado

Feito isso, é só criar a FK_CLIENTES novamente e criar corretamente a FK_VENDEDORES.

Espero ter ajudado, bons estudos!

Olá Leonardo, tudo bem? É realmente isso mesmo que a Maria Gabriela falou, e parabéns Maria Gabriela pela resposta bem completa! Então Leonardo, se não compreendeu alguma coisa é só falar que estamos a disposição!