Ir para conteúdo
Fórum Script Brasil
  • 0

Tabela não aceita chave estrangeira


Boobs

Pergunta

Oi turma estou precisando relacionar duas tabelas com mySQl

forenecedores e contatos

CREATE TABLE `fornecedores` (
  `idFornecedor` int(11) NOT NULL AUTO_INCREMENT,
  `nomefantasia` varchar(30) DEFAULT NULL,
  `razaoSocial` varchar(100) DEFAULT NULL,
  `CNPJ` char(14) DEFAULT NULL,
  `InscrEst` char(12) DEFAULT NULL,
  `enderecoEmpresa` varchar(50) DEFAULT NULL,
  `telefone1` char(10) DEFAULT NULL,
  `telefone2` char(10) DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  `CEP` char(8) DEFAULT NULL,
  `idContato` int(11) NOT NULL,
  PRIMARY KEY (`idFornecedor`)


CREATE TABLE `contatos` (
  `idContato` int(11) NOT NULL AUTO_INCREMENT,
  `nomeContato` varchar(30) DEFAULT NULL,
  `sobreNomeCont` varchar(50) DEFAULT NULL,
  `telefoneCont` char(10) DEFAULT NULL,
  `telefoneCont2` char(10) DEFAULT NULL,
  PRIMARY KEY (`idContato`)
estou usando o sqlyog e quando digito
ALTER TABLE fornecedores ADD FOREIGN KEY(idContato) REFERENCES contatos(idContato) ON DELETE CASCADE;

a mensagem que retorna é essa:

Query : alter table fornecedores add foreign key(idContato) references contatos(idContato) on delete cascade

Error Code : 1452

Cannot add or update a child row: a foreign key constraint fails (`mercearia`.<result 2 when explaining filename '#sql-328_4'>, CONSTRAINT `#sql-328_4_ibfk_1` FOREIGN KEY (`idContato`) REFERENCES `contatos` (`idContato`) ON DELETE CASCADE)

Execution Time : 00:00:00:000

Transfer Time : 00:00:00:000

Total Time : 00:00:00:000

Estou começando em mySQL agradeço qualquer ajuda pra saber onde estou errando

Editado por Denis Courcy
Melhorar entendimento do código
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'Boobs'

Você está usando o Engine InnoDB em ambas as tabelas? Se não estiver não vai funcionar.

Outra coisa. Não sei se por distração ou na hora de copiar o código para este tópico você esqueceu o ponto-e-virgula ao final de cada instrução.

O código correto é:

CREATE TABLE `fornecedores` (
   `idFornecedor` int(11) NOT NULL AUTO_INCREMENT,
   `nomefantasia` varchar(30) DEFAULT NULL,
   `razaoSocial` varchar(100) DEFAULT NULL,
   `CNPJ` char(14) DEFAULT NULL,
   `InscrEst` char(12) DEFAULT NULL,
   `enderecoEmpresa` varchar(50) DEFAULT NULL,
   `telefone1` char(10) DEFAULT NULL,
   `telefone2` char(10) DEFAULT NULL,
   `email` varchar(20) DEFAULT NULL,
   `CEP` char(8) DEFAULT NULL,
   `idContato` int(11) NOT NULL,
   PRIMARY KEY (`idFornecedor`)
)ENGINE = InnoDB;


CREATE TABLE `contatos` (
   `idContato` int(11) NOT NULL AUTO_INCREMENT,
   `nomeContato` varchar(30) DEFAULT NULL,
   `sobreNomeCont` varchar(50) DEFAULT NULL,
   `telefoneCont` char(10) DEFAULT NULL,
   `telefoneCont2` char(10) DEFAULT NULL,
   PRIMARY KEY (`idContato`)
)ENGINE = InnoDB;


-- estou usando o sqlyog e quando digito

ALTER TABLE `fornecedores` 
ADD CONSTRAINT FOREIGN KEY (`idContato`) REFERENCES `contatos` (`idContato`) ON DELETE CASCADE;

Link para o comentário
Compartilhar em outros sites

  • 0

valeu achei o problema - cada tabelaestava com Engine diferente e eu tive que refazer as tabelas em uma ordem diferente

Agora surgiu ouro problema das tabelas relacionadas e o php, mas acho que =isso tenho que postar na outra seção né?

Link para o comentário
Compartilhar em outros sites

  • 0

Bem de qualquer maneira lá vai:

Relacionei essas duas tabelas:

CREATE TABLE clientes (
     idcli INT NOT NULL AUTO_INCREMENT,
     nomecli VARCHAR(80),
     datanasc DATE,
     cpf CHAR(11),
     endereco VARCHAR(40),
     numero VARCHAR(5),
     bairroc varchar(20),
     cidadec varchar(30),
     uf varchar(2),
     telefone1 CHAR(10),
     telefone2 CHAR(10),
     emailcli VARCHAR(30),
     PRIMARY KEY(idcli)
);


CREATE TABLE usuarios (
    idusuario INT NOT NULL AUTO_INCREMENT,
    idcli INT NOT NULL,
    login VARCHAR(30),
    senha VARCHAR(30),
    PRIMARY KEY(idusuario)
);





ALTER TABLE usuarios ADD FOREIGN KEY(idcli) REFERENCES clientes(idcli)
ON DELETE CASCADE;
quando tento fazer uma inclusaão de usuario e senha via php assim:
<?php
$login=$_POST['usuario'];
$senha=$_POST['password'];
$link = mysql_connect("127.0.0.1", "root", "root")
or die("Não foi possível conectar");
mysql_select_db("mercearia")
or die("Não foi possível selecionar o banco de dados");
$consulta = "INSERT INTO usuarios
( login , senha)
VALUES
('$login', '$senha')";
$resultado = mysql_query($consulta)
or die("Falha na execução da consulta");
echo "Dados adicionados com sucesso";
?>

sempre diz que ouve falha na execução da consulta, isso começou depois que eu relacionei as tabelas

me disseram que tenho que colocar um select a mais nesse codigo porque ele não serve para

tabels relacionadas

Qualquer ajuda agradeço galera!!

PS o form que envia as informações esta certo, o banco esta ativo e funcionando, as variaveis recebem a infornmação mas não

incluem mais no banco.

Editado por Denis Courcy
Melhorar entendimento do código
Link para o comentário
Compartilhar em outros sites

  • 0
...ALTER TABLE usuarios ADD FOREIGN KEY(idcli) REFERENCES clientes(idcli)
ON DELETE CASCADE;

sempre diz que ouve falha na execução da consulta, isso começou depois que eu relacionei as tabelas

me disseram que tenho que colocar um select a mais nesse codigo porque ele não serve para

tabels relacionadas

Vamos a resposta.

Você errou quando inseriu o alter table acima?

Pois, para cadastrar um usuário, agora, você precisa inserir o idcli. Você tornou o usuário dependente de clientes.

A soklução não é criar um select como ter "orientaram". Para ficar como está, basta você informar um idcli existente na tabela clientes, quando você fizer o insert de registro em usuário..

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...