Guest --Adriano -- Postado Junho 30, 2007 Denunciar Share Postado Junho 30, 2007 Olá galera...não consigo fazer funcionar tabela estrangeira. Aí vai o código:CREATE TABLE dadosmedicao(indice INT NOT NULL AUTO_INCREMENT, indicepi INT NOT NULL, indiceos INT NOT NULL, datac date, mescorrente char(20), anocorrente smallint(4), valormedicao float(9,2), valorreajustmed float(9,2), valormobilizacao float(9,2), valorreajustmob float(9,2), valormedreajust float(9,2), indicereajust float(6,4), fatosnotaveis longtext(2000), PRIMARY KEY(indice), INDEX (indicepi), FOREIGN KEY (indicepi) REFERENCES tab_pi(indicepi) ON UPDATE CASCADE ON DELETE CASCADE, INDEX (indiceos), FOREIGN KEY (indiceos) REFERENCES tab_os(indiceos)) TYPE=INNODB;A tabela tab_pi e tab_os estao criadas e com chave primaria em indicepi e indiceos respectivamente.Fica dando erro toda hora. Estou fazendo pelo phpmyamim.Obrigado. Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Julho 1, 2007 Denunciar Share Postado Julho 1, 2007 Verifique se os campos indicepi das duas tabelas são do mesmo tipo e com os mesmos atributos (Int Not Null).Poste o código da tabela tab_pi e o erro que está sendo retornado.Abraços,Beraldo Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Adriano -- Postado Julho 2, 2007 Denunciar Share Postado Julho 2, 2007 Olá....Pois é...consegui criar a tabela. Só que agora o problema é que não consigo cadastrar pelo php. Aí vai o código:$sql = mysql_query("INSERT INTO dadosmedicao ( datac , mescorrente , anocorrente , valormedicao , valorreajustmed , valormobilizacao , valorreajustmob , valormedreajust , indicereajust , fatosnotaveis) ". " VALUES ( '$datac' , '$mescorrente' , '$anocorrente' , '$valormedicao' , '$valorreajustmed' , '$valormobilizacao' , '$valorreajustmob' , '$valormedreajust' , '$indicereajust' , '$fatosnotaveis')"); if($sql) { $retorno = "Cadastrado com sucesso."; } else { $retorno = "Erro no cadastro."; }Está dando erro no cadastro. E só acontece porque tem chave estrangeira, se for sem FK ele cadastra normal.Obrigado!!!CREATE TABLE dadosmedicao ( indice int(11) NOT NULL auto_increment, indicepi int(11) NOT NULL, indiceos int(11) NOT NULL, datac date default NULL, mescorrente char(20) default NULL, anocorrente smallint(4) default NULL, valormedicao float(9,2) default NULL, valorreajustmed float(9,2) default NULL, valormobilizacao float(9,2) default NULL, valorreajustmob float(9,2) default NULL, valormedreajust float(9,2) default NULL, indicereajust float(6,4) default NULL, fatosnotaveis longtext, PRIMARY KEY (indice), INDEX (indicepi), INDEX (indiceos), FOREIGN KEY (indicepi) REFERENCES tab_pi (indicepi), FOREIGN KEY (indiceos) REFERENCES tab_os (indiceos) ) ENGINE=InnoDB Link para o comentário Compartilhar em outros sites More sharing options...
0 CSML sistemas Postado Julho 3, 2007 Denunciar Share Postado Julho 3, 2007 (editado) Só uma pergunta:Sua query de inserção não atribuiu valores para as colunas "indicepi" e "indiceos". Não seriam valores obrigatórios, já que tais colunas estão definidas como "NOT NULL" ??? Editado Julho 3, 2007 por CSML sistemas Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Adriano -- Postado Julho 3, 2007 Denunciar Share Postado Julho 3, 2007 Só uma pergunta:Sua query de inserção não atribuiu valores para as colunas "indicepi" e "indiceos". Não seriam valores obrigatórios, já que tais colunas estão definidas como "NOT NULL" ???Pois é...como você está vendo estou aprendendo ainda. Os valores das colunas "indicepi" e "indiceos" não teriam que atualizar automaticamente já que é chave estrangeira para tab_pi(indicepi) e tab_os(indiceos) respectivamente? Ou melhor...a chave estrangeira só é necessária para pesquisas com o comando Select???Desculpa minha ignorancia no assunto.....mas estou aprendendo!!!Obrigado. Link para o comentário Compartilhar em outros sites More sharing options...
0 CSML sistemas Postado Julho 3, 2007 Denunciar Share Postado Julho 3, 2007 O uso de chaves estrangeiras é justificado quando a importância da manutenção da integridade referencial supera a necessidade de alta performance do banco de dados. Geralmente, por este último, a manutenção da integridade é implementada na aplicação, como a que você desenvolve em PHP.A questão da obrigatoriedade da inclusão dos valores para as colunas "indicepi" e "indiceos" em seu caso trata-se de responder à simples e primária pergunta: de onde o MySQL obteria tais valores quando fosse realizada a operação INSERT na tabela "dadosmedicao"?Obviamente, é necessário que qualquer valor atribuído a determinado campo seja definido por um código explícito. Softwares não possuem conhecimento tácito... :lol: (não me leve a mal, apenas estou de bom humor!) Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest --Adriano --
Olá galera...
não consigo fazer funcionar tabela estrangeira. Aí vai o código:
CREATE TABLE dadosmedicao(indice INT NOT NULL AUTO_INCREMENT,
indicepi INT NOT NULL,
indiceos INT NOT NULL,
datac date, mescorrente char(20), anocorrente smallint(4),
valormedicao float(9,2), valorreajustmed float(9,2),
valormobilizacao float(9,2), valorreajustmob float(9,2),
valormedreajust float(9,2), indicereajust float(6,4),
fatosnotaveis longtext(2000),
PRIMARY KEY(indice),
INDEX (indicepi),
FOREIGN KEY (indicepi)
REFERENCES tab_pi(indicepi)
ON UPDATE CASCADE ON DELETE CASCADE,
INDEX (indiceos),
FOREIGN KEY (indiceos)
REFERENCES tab_os(indiceos)) TYPE=INNODB;
A tabela tab_pi e tab_os estao criadas e com chave primaria em indicepi e indiceos respectivamente.
Fica dando erro toda hora. Estou fazendo pelo phpmyamim.
Obrigado.
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados