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

Foreign Key não Funciona De Jeito Nenhum


Guest --Adriano --

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

  • 0
Guest --Adriano --

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

  • 0
Guest --Adriano --
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

  • 0

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

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


  • Estatísticas dos Fóruns

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