Fazer autorelacionamento mysql

22/09/2020

0

Oi gente, preciso fazer que o supervisor da tabela funcionário seja uma chave estrangeira do cpf_funcionário. Como faço isto? Tentei diversas formas e sempre da o erro: Error Code: 3780. Referencing column 'cpf_supervisor' and referenced column 'cpf_func' in foreign key constraint 'supervisor' are incompatible.


Segue o código:

CREATE TABLE tb_func (
cpf_func INT NOT NULL,
cargo_func varchar(35) NOT NULL,
cpf_supervisor INT NULL,
PRIMARY KEY (cpf_func)
);

ALTER TABLE tb_func ADD FOREIGN KEY (cpf_supervisor) REFERENCES tb_func (cpf_func);
Felipe Benedetto

Felipe Benedetto

Responder

Post mais votado

23/09/2020

Olá amigo, tudo bem?

Primeiramente, campos de CPF não podem ser inteiros pois temos muitos CPFs que começam com "0" e se for inteiro, o banco engole esse primeiro caracter. Ai você teria que fazer uma verificação pra se faltar um caracter adicionar o "0" no inicio e isso pode gerar CPF invalido.

Segundamente, os campos são incompativeis, creio eu, porque um é nulo e o outro não. Tente colocar os dois não nulos e testar.

Poste se deu certo.

Espero ter ajudado.

Alex William

Alex William
Responder

Mais Posts

23/09/2020

Felipe Benedetto

Olá amigo, tudo bem?

Primeiramente, campos de CPF não podem ser inteiros pois temos muitos CPFs que começam com "0" e se for inteiro, o banco engole esse primeiro caracter. Ai você teria que fazer uma verificação pra se faltar um caracter adicionar o "0" no inicio e isso pode gerar CPF invalido.

Segundamente, os campos são incompativeis, creio eu, porque um é nulo e o outro não. Tente colocar os dois não nulos e testar.

Poste se deu certo.

Espero ter ajudado.


Olá Alex, tudo bem?

Cara, descobri que foi um erro meu... eu alterei a foreign key para INT mas esqueci de dar um alter table ou drop table, mas antes estava a foreign key como VARCHAR e a primary key como INT, ai por isso deu esta incompatibilidade....

Mas sobre este esquema do INT no cpf, muito obrigado mesmo, não sabia disto. Aliás estava usado numeros do 1 ao 15 e dizendo q são CPF, não tinha me atentado nisto... agora mudei para ID ao invés de cpf. Obrigado pela ajuda!!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar