Criei tabelas no MySQL Workbench, como mostrado abaixo:
Tabela ORDRE:
CREATE TABLE Ordre (
OrdreID INT NOT NULL,
OrdreDato DATE DEFAULT NULL,
KundeID INT DEFAULT NULL,
CONSTRAINT Ordre_pk PRIMARY KEY (OrdreID),
CONSTRAINT Ordre_fk FOREIGN KEY (KundeID) REFERENCES Kunde (KundeID)
)
ENGINE = InnoDB;
Tabela PRODUKT:
CREATE TABLE Produkt (
ProduktID INT NOT NULL,
ProduktBeskrivelse VARCHAR(100) DEFAULT NULL,
ProduktFarge VARCHAR(20) DEFAULT NULL,
Enhetpris INT DEFAULT NULL,
CONSTRAINT Produkt_pk PRIMARY KEY (ProduktID)
)
ENGINE = InnoDB;
e tabela ORDRELINJE:
CREATE TABLE Ordrelinje (
Ordre INT NOT NULL,
Produkt INT NOT NULL,
AntallBestilt INT DEFAULT NULL,
CONSTRAINT Ordrelinje_pk PRIMARY KEY (Ordre, Produkt),
CONSTRAINT Ordrelinje_fk FOREIGN KEY (Ordre) REFERENCES Ordre (OrdreID),
CONSTRAINT Ordrelinje_fk1 FOREIGN KEY (Produkt) REFERENCES Produkt (ProduktID)
)
ENGINE = InnoDB;
Então, quando tento inserir valores na ORDRELINJE
tabela, recebo:
Código de erro: 1452. Não é possível adicionar ou atualizar uma linha filho: uma restrição de chave estrangeira falha (
srdjank
.Ordrelinje
, CONSTRAINTOrdrelinje_fk
FOREIGN KEY (Ordre
) REFERENCESOrdre
(OrdreID
))
Eu já vi os outros posts sobre este tópico, mas sem sorte. Estou supervisionando alguma coisa ou alguma idéia do que fazer?
mysql
sql
mariadb
mysql-error-1452
user3289677
fonte
fonte
Respostas:
Retirado do uso de restrições FOREIGN KEY
Portanto, seu erro
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails
significa essencialmente que você está tentando adicionar uma linha à suaOrdrelinje
tabela para a qual nenhuma linha correspondente (CódigoDoPedido) está presente naOrdre
tabela.Você deve primeiro inserir a linha na sua
Ordre
tabela.fonte
Você está recebendo essa verificação de restrição porque a
Ordre
tabela não possui referênciaOrdreID
fornecida no comando insert.Para inserir valor
Ordrelinje
, primeiro você deve inserir o valor naOrdre
tabela e usá-loOrdreID
naOrderlinje
tabela.Ou você pode remover a restrição não nula e inserir um valor NULL nela.
fonte
Você deve excluir dados na tabela filha que não possui nenhum valor de chave estrangeira correspondente à chave primária da tabela pai. Ou excluir todos os dados da tabela filha e inserir novos dados com o mesmo valor de chave estrangeira que a chave primária na tabela pai . Isso deve funcionar. Aqui também um vídeo do youtube
fonte
O problema está na restrição de chave estrangeira. Por padrão (SET FOREIGN_KEY_CHECKS = 1). A opção FOREIGN_KEY_CHECKS especifica se as restrições de chave estrangeira devem ou não ser verificadas nas tabelas do InnoDB. MySQL - SET FOREIGN_KEY_CHECKS
Podemos definir a verificação de chave estrangeira como desativada antes de executar a Consulta. Desativar chave estrangeira .
Execute uma dessas linhas antes de executar sua consulta, para poder executá-la com êxito. :)
1) Para sessão (recomendado)
2) Globalmente
fonte
Esse erro geralmente ocorre porque temos alguns valores no campo de referência da tabela filho, que não existem no campo referenciado / candidato da tabela pai.
Às vezes, podemos receber esse erro quando aplicamos restrições de chave estrangeira às tabelas existentes, já com dados . Algumas das outras respostas estão sugerindo excluir os dados completamente da tabela filho e aplicar a restrição. No entanto, isso não é uma opção quando já temos dados de trabalho / produção na tabela filho. Na maioria dos cenários, precisaremos atualizar os dados na tabela filho (em vez de excluí-los).
Agora, podemos utilizar
Left Join
para encontrar todas essas linhas na tabela filho, que não possuem valores correspondentes na tabela pai. A consulta a seguir seria útil para buscar essas linhas não correspondentes:Agora, você geralmente pode executar uma (ou mais) das seguintes etapas para corrigir os dados.
null
também.Depois que os dados são corrigidos, podemos aplicar a restrição de chave estrangeira usando a
ALTER TABLE
sintaxe.fonte
na tabela de chave estrangeira tem um valor que não pertence à tabela de chave primária que será relacionada, portanto, você deve excluir todos os dados primeiro / ajustar o valor da tabela de chave estrangeira de acordo com o valor da chave primária
fonte
Eu estava recebendo esse problema, embora minha tabela pai tivesse todos os valores que eu estava referenciando na minha tabela filho. O problema parecia ser que não era possível adicionar várias referências filho a uma única chave estrangeira. Em outras palavras, se eu tivesse cinco linhas de dados referenciadas na mesma chave estrangeira, o MySQL só estava me permitindo carregar a primeira linha e me dando o erro 1452.
O que funcionou para mim foi digitar o código "SET GLOBAL FOREIGN_KEY_CHECKS = 0". Depois disso, fechei o MySQL e, em seguida, reiniciei-o e consegui enviar todos os meus dados sem erros. Digitei "SET GLOBAL FOREIGN_KEY_CHECKS = 1" para restaurar o sistema ao normal, embora não tenha muita certeza do que FOREIGN_KEY_CHECKS faz. Espero que isto ajude!
fonte
Isso pode ser corrigido inserindo os respectivos registros na tabela pai primeiro e, em seguida, podemos inserir registros na respectiva coluna da tabela filho. Verifique também o tipo e o tamanho dos dados da coluna. Deve ser igual à coluna da tabela pai, até o mecanismo e o agrupamento também devem ser os mesmos. Experimente! Foi assim que resolvi o meu. Corrija-me se estiver errado.
fonte
Sua
ORDRELINJE
tabela está vinculada aORDER
tabela usando uma restrição de chave estrangeira, deconstraint Ordrelinje_fk foreign key(Ordre) references Ordre(OrdreID)
acordo com aOrdre int NOT NULL,
coluna da tabela queORDRELINJE
deve corresponder a qualquerOrdre int NOT NULL,
coluna daORDER
tabela.Agora, o que está acontecendo aqui é que, quando você está inserindo uma nova linha na
ORDRELINJE
tabela, de acordo com a restrição fkOrdrelinje_fk
, está verificando aORDER
tabela se elaOrdreID
está presente ou não e como não está em conformidade com nenhum OrderId, o Compiler está reclamando por violação de chave estrangeira. É por isso que você está recebendo esse erro.Chave estrangeira é a chave primária da outra tabela que você usa em qualquer tabela para vincular as duas. Essa chave está vinculada à restrição de chave estrangeira especificada ao criar a tabela. Qualquer operação nos dados não deve violar essa restrição. A violação dessa restrição pode resultar em erros como este.
Espero ter deixado claro.
fonte
Ao inserir os valores do atributo de chave estrangeira, verifique primeiro o tipo de atributo e o valor do atributo de chave primária na relação pai, se os valores na relação pai corresponderem, você poderá inserir / atualizar facilmente os valores do atributo filho.
fonte
você deve adicionar dados da CHAVE DE REFERÊNCIAS na TABELA PRIMÁRIA à CHAVE ESTRANGEIRA na CHILD TABLE
, significa que não adiciona dados aleatórios à chave estrangeira ; basta usar os dados da chave primária que podem ser acessados
descrição dos dados na chave estrangeira
fonte
Isso me ajudou depois de ler as respostas do @-Faizan e outras.
no phpMyAdmin e clique na consulta. Não conheço o WorkBench, mas as outras respostas podem ajudá-lo.
fonte
você deve inserir pelo menos um raw em cada tabela (aqueles para os quais as chaves estrangeiras apontam) e inserir ou atualizar os valores das chaves estrangeiras
fonte
vou apertar isso aqui: meu caso estava tentando criar um like para um post que não existe; ao confirmar o banco de dados, o erro foi gerado. A solução foi criar primeiro o post e depois gostar. do meu entendimento, se o post_id fosse salvo na tabela de gostos, ele primeiro deveria verificar a tabela de postagens para verificar a existência. achei melhor tê-lo assim, já que é mais lógico para mim desse jeito ..
fonte
Quando você usa chave estrangeira , seu pedido de colunas deve ser o mesmo para inserção .
Por exemplo, se você está adicionando
(userid, password)
em table1 de table2 seguida, a partir table2 ordem deve ser o mesmo(userid, password)
e não como(password,userid)
ondeuserid
é chave estrangeira em table2 de table1 .fonte
O problema ocorre porque você define a chave estrangeira na tabela filho depois de inserir alguns dados na tabela filho.
Tente remover todos os dados da tabela filho, defina a chave estrangeira e depois adicione / insira os dados na tabela, pois funcionará.
fonte
verifique o não. do registro na tabela pai que corresponde à tabela filha e também à chave primária deve corresponder à referência de chave estrangeira. Isso funciona para mim.
fonte
Está 100% funcionando ...
ERRO 1452: Não é possível adicionar ou atualizar uma linha filha: uma restrição de chave estrangeira falha .... se esse tipo de erro ocorrer: primeiro, vá para esta tabela e verifique a configuração> se o mecanismo for: InnoDB, mude para MyISAM
(e excluir referências de restrição estrangeira)
fonte