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

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

Aceitar