Tabela não aceita chave estrangeira

MySQL

16/03/2010

Amigos quando tento relacionar duas tabelas a seguinte mensagem aparece:


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


AS tabelas são fornecedores e contatos:

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`)


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`)


Sou iniciante em mysql e preciso relacionar essas tabelas, estou usando o mysql-essential-5.1.44-win32 e o
sqlyog como cliente

Qualquer ajuda para saber onde estou errando agradeço.

Fabiano Silva

Fabiano Silva

Curtidas 0

Respostas

Carlos Mazzi

Carlos Mazzi

16/03/2010

Verifique se acontece esse erro indicando que as tabelas relacionadas, já possuam dados inseridos, caso sim, e se for teste, apague os dados das tabelas referidas e tente novamente o relacionamento.   Isso as vezes acontence usando as ferramentas essentials do MySQL, sugiro o ToadSQL ou MyEMS MySQL da empresa EMS, tem uma versão que é free...   qq coisa post ai de novo, abraços++
GOSTEI 0
Wesley Batista

Wesley Batista

16/03/2010

Olá amigo, utilizo MySQL a 5 anos e até hoje não tenho o que reclamar do MySQL Query brownser, gosto muito da ferramenta e também do banco de dados, ainda mais que é uma ferramente desenvolvida pela propry empresa que fez o MYSQL. Mas esta não é a questão, no mysql query brownser coloque estes scritps abaixo, e execute os mesmos em sequencia, observe que no final de cada linha tem um ";"  isso indica que é o fim da execução de um bloco de código assim você executa o primerio parte pro segundo e por último(logicamente), executa o terceiro , script e sua tabela estará criada


CREATE TABLE `bddevmedia`.`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;



CREATE TABLE `bddevmedia`.`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;

ALTER TABLE `bddevmedia`.`fornecedores` ADD CONSTRAINT `FK_fornecedores_1` FOREIGN KEY `FK_fornecedores_1` (`idContato`)
    REFERENCES `contatos` (`idContato`)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT;




Obs : Fiz o teste aqui com sua estrutura só colocando a mesma da maneira correta, e funcionou.

Espero te ajudado

Um abraço

Wesley Batista
e-mail : wesley@tdstecnologia.com.br
site : www.tdstecnologiarj.com.br

GOSTEI 0
José

José

16/03/2010

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0
POSTAR