GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

MYSQL WORKBENCH erro com FOREIGN KEY


#1

Estou com problemas para inserir os dados da tabela Projetos no meu banco de dados…
Segue o código:

create database pratica04;
use pratica04;



create table GrandesAreasDeConhecimento(
codGac int not null,
nome VARCHAR(40) not null,
primary key (codGac)
);



create table AreasDeConhecimento(
codigo int not null,
nome varchar(40),
fk_codGac int not null,
fk_cpf_pesq VARCHAR(40),
primary key(codigo),
foreign key(fk_codGac) references GrandesAreasDeConhecimento (codGac)

);



create table Instituicao(
codInstituicao int not null,
nome varchar(40) not null,
PRIMARY KEY (codInstituicao) 
) default charset = utf8;

create table Avaliador(
cpf VARCHAR(40) not null,
grauAcademico varchar(40) not null,
rg VARCHAR(20) not null, 
nome varchar(40) not null,
dataNasc date not null,
sexo enum ('M', 'F'),
fk_codInstituicao int not null,
PRIMARY KEY(cpf),
FOREIGN KEY(fk_codInstituicao)
references Instituicao(codInstituicao)
) default charset = utf8;

CREATE TABLE Pesquisador(
cpf VARCHAR(40) not null,
grauAcademico VARCHAR(15) NOT NULL,
RG VARCHAR(20) not null,
sexo enum ('M', 'F'),
nome VARCHAR(40)not null,
dataNasc date not null,
fk_codInstituicao int not null,
constraint cc primary key (cpf),
constraint dd foreign key (fk_codInstituicao)
references Instituicao(codInstituicao)

) default charset = utf8;



CREATE TABLE Projetos(
codigo_interno int not null,
titulo    VARCHAR(150),
orcamento VARCHAR(40),
dt_envio date not null,
dt_recebe date not null,
resposta VARCHAR(40),
fk_codInstituicao int not null,
fk_cpf_pesq VARCHAR(40) not null,
fk_codGac int not null,
fk_cod int not null,
PRIMARY KEY (codigo_interno),
CONSTRAINT fk_inst FOREIGN KEY (fk_codInstituicao) references Instituicao(codInstituicao),
CONSTRAINT fk_cpfp FOREIGN KEY(fk_cpf_pesq) references Pesquisador(cpf),
CONSTRAINT fk_codArea FOREIGN KEY (fk_codGac) references GrandesAreasDeConhecimento (codGac),
CONSTRAINT fk_codAa FOREIGN KEY (fk_cod) references AreasDeConhecimento(codigo)
) default charset = utf8;



/*
CONSTRAINT fk_inst FOREIGN KEY (fk_codInstituicaoa) references Instituicao(codInstituicao),
CONSTRAINT fk_cpfp FOREIGN KEY(fk_cpf_pesqu) references Pesquisador(cpf),
CONSTRAINT fk_codArea FOREIGN KEY (fk_codGacc) references GrandesAreasDeConhecimento (codGac),
CONSTRAINT fk_codAa FOREIGN KEY (fk_cod) references AreasDeConhecimento(codigo)
*/




insert into GrandesAreasDeConhecimento Values 
(1, 'Ciências Exatas e da Terra'),
(2, 'Ciências da Saúde'),
(3, 'Ciências Biológicas'),
(4, 'Ciências Agrárias'),
(5, 'Engenharias'),
(6, 'Ciências Sociais Aplicadas'),
(7, 'Ciências Humanas')
;

insert into Pesquisador Values
('653.323.764-21', 'Mestre', '32.125.633-9', 'M', 'Irineu Rochecci', '1975-02-22', 1),
('857.387.291-29', 'Mestre', '63.357.742-2', 'M', 'Rocchelo Bernazzet', '1950-06-06', 1),
('126.632.284-92', 'Mestre', '12.267.743-7', 'M', 'Richard Rushim', '1987-07-27', 3),
('124.673.368-84', 'Doutor', '57.216.673-9', 'F', 'Rachel Enetti', '1979-06-10', 2),
('521.567.782-24', 'Doutor', '32.125.633-9', 'M', 'Malaquias Ronaldo', '1981-06-26', 1),
('958.864.418-99', 'Doutor', '35.531.178-4', 'F', 'Bernadett Hustohn', '1972-12-06', 2),
('212.552.721-23', 'Doutor', '65.512.672-3', 'M', 'Rermelino Allah', '1978-06-20', 2),
('244.512.215-88', 'Doutor', '63.357.742-1', 'F', 'Angella Cristo', '1989-12-10', 3),
('235.531.774-62', 'Doutor', '44.674.478-2', 'M', 'Robben Yood', '1969-10-01', 2),
('633.521.832-82', 'Doutor', '24.567.214-2', 'F', 'Camilla Acchin', '1987-02-20', 2)
;


insert into AreasDeConhecimento (codigo, nome, fk_codGac, fk_cpf_pesq)Values 
(1, 'Matemática', 1, '129.312.442.21'),
(2,  'Física', 1, '124.421.754-12'),
(3,  'Ciência da Computação', 1, '244.512.215-88'),
(4,  'Medicina', 2, '521.422.746-23'),
(5,  'Odontologia', 2, '235.531.774-62'),
(6,  'Farmácia', 2, '622.125.762-26'),
(7,  'Biologia Geral', 3, '633.521.832-82'),
(8,  'Genética', 3, '212.552.721-23'),
(9,  'Morfologia', 3, '512.125.742-21'),
(10, 'Medicina Veterinária', 4, '521.567.782-24'),
(11, 'Engenharia Agrícola', 4, '118.521.125-22'),
(12, 'Agronomia', 4, '124.426.167-21'),
(13, 'Engenharia Química', 5, '124.425.753-12'),
(14, 'Engenharia Civil', 5, '774.253.689-01'),
(15, 'Engenharia De Minas', 5, '958.864.418-99'),
(16, 'Administração', 6, '126.642.257-31'),
(17, 'Direito', 6, '126.632.212-95'),
(18, 'Economia', 6, '124.673.368-84'),
(19, 'Antropologia', 7, '126.632.284-92'),
(20, 'Filosofia', 7, '857.387.291-29')

;


-- 10 pesquisadores, sendo 3 mestres e 7 doutores.

insert into Instituicao Values
(1, 'USJT'),
(2, 'UNICAMP'),
(3, 'MACKENZIE')
;

insert into Avaliador (cpf, grauAcademico, rg, nome, dataNasc, sexo, fk_codInstituicao)Values
('125.552.256-21', 'Mestre', '51.256.732-1', 'Astéfalo Santos', '1980-09-21', 'M', 1),
('124.567.753-12', 'Mestre', '12.225.731-2', 'Antonella De Cabritt', '1979-07-27', 'F', 2),
('124.422.245-12', 'Doutor', '15.221.639-9', 'Romero Brito', '1969-01-07', 'M', 3),
('234.466.214-12', 'Doutor', '12.631.122-9', 'Karla Rox', '1967-10-20', 'F', 1),
('123.366.664-21', 'Doutor', '16.639.201-5', 'Sharlott Saluh', '1970-03-21', 'F', 2)
;



insert into Projetos (codigo_interno, titulo, orcamento, dt_envio, dt_recebe, resposta, fk_codInstituicao, fk_cpf_pesq, fk_codGac, fk_cod)values
(1, 'NOVA FÓRMULA PERFEITA PARA CALCULO DA AREA DO CORPO HUMANO', 'R$20000', '2018-06-10', '2019-06-10',  'APROVADO', 2, '370.624.190-01', 1, 1), -- ok
(2, 'ENERGIA LIMPA COM IMÃS', 'R$300', '2018-02-02', '2018-09-11',  'APROVADO', 1 ,'742.343.580-53', 1, 2), -- ok
(3, 'CELULAR DE GRAFENO', 'R$150000', '2018-11-29', '2020-11-29', 'APROVADO', 1, '633.521.832-82', 1, 3), -- ok 
(4, 'ROBÔ QUE CURA PACIENTES', 'R$19000', '2018-07-27', '2019-05-27',  'APROVADO', 2, '244.512.215-88', 2, 4), -- ok
(5, 'IMPLANTAR 3A GERAÇÃO DE DENTES', 'R$40000', '2018-01-01', '2024-01-01',  'APROVADO', 3, '469.690.120-34', 2, 5), -- ok	
(6, 'PESQUISA - CURA DA AIDS', 'R$16000', '2018-05-20', '2019-05-20',  'APROVADO', 1, '653.323.764-21', 2, 6), -- ok
(7, 'PRODUÇÃO DE BIOINSETICIDA', 'R$51000', '2013-07-27', '2023-05-11',  'APROVADO', 2, '686.007.120-68', 3, 7), -- ok
(8, 'RESULTADO DA CRUZAÇÃO DE ESPÉCIES DIFERENTES', 'R$11000', '2019-02-26', '2020-08-10', 'APROVADO', 1, '322.891.330-94', 3, 8), -- ok
(9, 'BIOLOGIA E TAXONOMIA DE TRIATOMINEOS, VETORES DA DOENÇA DE CHAGAS', 'R$12000', '2010-10-29', '2020-10-29', 'APROVADO', 1, '780.180.500-31', 3, 9), -- ok
(10, 'MÁQUINA QUE CUSTURA PONTOS EM CÃES', 'R$2900', '2018-02-02', '2018-12-02',  'APROVADO', 1 ,'235.531.774-62', 4, 10), -- ok
(11, 'PLANTAS NANOBIONICAS E ILUMINAÇÃO NATURAL', 'R$7000,00', '2019-01-01', '2021-01-01',  'REPROVADO', 2, '212.552.721-23', 4, 11), -- ok
(12, 'ACELERAÇÃO DE PLANTAÇÕES', 'R$7900', '2018-02-02', '2018-10-10',  'REPROVADO', 3, '857.387.291-29', 4, 12), -- ok
(13, 'PRODUTO QUE DISSOLVE QUALQUER COISA', 'R$12002', '2019-01-20', '2029-01-20', 'REPROVADO', 3, '012.204.542-21', 5, 13), -- ok
(14, 'TIJOLOS INTELIGENTES', 'R$15000', '2018-11-16', '2020-12-16',  'REPROVADO', 3, '002.454.690-95', 5, 14), -- ok
(15, 'PRODUTO QUÍMICO DESTACA MINÉRIOS ATÉ 5 CAMADAS', 'R$30000', '2019-05-06', '2021-05-06',  'REPROVADO', 2, '324.184.830-29', 5, 15), -- ok
(16, 'DISCIPLINA ADMINISTRAÇÃO NAS ESCOLAS', 'R$30000', '2020-01-01', '2022-10-10','NÃO AVALIADO', 2, '850.201.660-14', 6, 16), -- ok
(17, 'ESTUDO DE MICRO EXPRESSÕES NO JULGAMENTO', 'R$3500', '2018-01-25', '2019-04-25',  'NÃO AVALIADO', 3, '217.075.780-52', 6, 17), -- ok
(18, 'A FORMA QUE O DINHEIRO ESTÁ GIRANDO O MUNDO', 'R$6606', '2018-12-25', '2019-12-15',  'NÃO AVALIADO', 2, '284.504.810-66', 6, 18), -- ok
(19, 'ANTROPOLOGIA - OBJETOS E COMPORTAMENTOS', 'R$4000,00', '2019-01-01', '2021-01-01',  'NÃO AVALIADO', 2, '032.127.890-93', 7, 19), -- ok
(20, 'TEORIA DA PROJETABILIDADE DE FUNDO', 'R$900', '2018-03-10', '2018-10-10',  'NÃO AVALIADO', 1, '249.497.100-44', 7, 20) -- ok
;

ERRO QUE APARECE:
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (pratica04.projetos, CONSTRAINT fk_cpfp FOREIGN KEY (fk_cpf_pesq) REFERENCES pesquisador (cpf)) 0.078 sec

desde já, obrigado a todos…
OBS: EU JÁ TINHA CONSEGUIDO ADICIONAR OS PROJETOS UMA VEZ, MAS FIZ CONFUSÃO COM AS FK DA GRANDE AREA DE CONHECIMENTO E AREA DE CONHECIMENTO, AI TIVE Q DAR UM DROP DATABASE E COMECEI DNV, MAS QUANDO ARRUMEI O SCRIPT DEU ESSE ERRO


#2

Olá, amigo.

Como “solução” para o caso você pode desabilitar temporariamente as fk’s do seu banco, criar as tabelas e afins, após, habilitar novamente as fks, testei seu código aqui e funcionou.

Para isto, faça:

-- no início do seu código
set foreign_key_checks = 0; -- desabilitando as fks

SEU CÓDIGO...

set foreign_key_checks = 1; -- habilitando as fks.

#3

Aparentemente, você está tentando inserir registros na tabela de Projetos com um cpf do Pesquisador que não possui um equivalente na tabela Pesquisador. Ex:

insert into Projetos (codigo_interno, titulo, orcamento, dt_envio, dt_recebe, resposta, fk_codInstituicao, fk_cpf_pesq, fk_codGac, fk_cod)values
(1, ‘NOVA FÓRMULA PERFEITA PARA CALCULO DA AREA DO CORPO HUMANO’, ‘R$20000’, ‘2018-06-10’, ‘2019-06-10’, ‘APROVADO’, 2, ‘370.624.190-01’, 1, 1), – ok

Não há nenhum pesquisador com o cpf em negrito no insert que você faz acima na tabela Pesquisador.

Confira se os CPFs na tabela Pesquisador e o campo cpf_pesquisador estão batendo, se não está faltando algum.

Abraço.


#6

Pensei que era isso mesmo, arrumei aqui e permanece o mesmo erro


#7

ué, simples assim? deu certo cara, se eu desativei as fk, como consegui inserir na table projetos cpf dos pesquisadores que são fk? buguei


#8

A mensagem de erro diz que você está tentando inserir um registro em uma tabela que tem uma chave estrangeira referenciando a tabela Pesquisador. Se o erro permanece, então ainda há alguma diferença.

Você desativou a verificação das chaves, então não obtém mais o erro. Se é o que você quer (que não é recomendado), é melhor então você criar as tabelas sem chaves estrangeiras.

Abraço.


#9

Não havia reparado a questão dos dados como muito bem observado pelo colega @TerraSkilll

Sugestão, crie a estrutura, só após faça a inserção dos dados, acredito que dessa forma você conseguirá localizar onde está errando com mais facilidade.

Novamente, olhe com atenção a dica do colega @TerraSkilll


#10

Entendi, e galera, pra eu listar o avaliador que mais avaliou projetos, preciso usar o Inner Join correto? algo do tipo

select max fk_cpf_avli 
from Projetos
inner join Avaliador
on Projetos.fk_cpf_avli  = Avaliador.cpf

não sei o que colocar no where agora, podem me ajudar?