Tabela não aceita chave estrangeira
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.
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
Curtidas 0
Respostas
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
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
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
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é
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