Fazer autorelacionamento mysql

SQL

MySQL

22/09/2020

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

Curtidas 0

Melhor post

Alex William

Alex William

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.
GOSTEI 1

Mais Respostas

Felipe Benedetto

Felipe Benedetto

22/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.


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!!
GOSTEI 0
POSTAR