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

(Resolvido) problema foreign key - mysql


andreamussap

Pergunta

olá.

Eu acompanhei o tópico do "felipebath" ( http://scriptbrasil.com.br/forum/index.php?showtopic=133876) que já está fechado, pois estou com o mesmo problema.

Porém mesmo seguindo as dicas de lá, continuo não conseguindo, alguém pode dar uma ajuda:

CREATE TABLE editora_gibi (  
   id_editora int UNSIGNED  NOT NULL auto_increment,
   nome_editora varchar(255),
   PRIMARY KEY(id_editora )
)ENGINE=InnoDB;
O seu comando SQL foi executado com sucesso (O Query demorou 0.1469 sec) (no tópico do "felipebath", o moderador Denys Courci diz: Como já falei antes em outro post hoje, não use AUTO_INCREMENT com int. Use int unsigned, pois o AUTO_INCREMENT é para número inteiro positivo e você não precisará do byte de sinal. Porém eu tentei criar a table acima retirando o INT e deu erro, então eu deixei) agora o problema da FK quando tento criar a proxima tabela:
CREATE TABLE serie (    
   id_serie int UNSIGNED  NOT NULL auto_increment,
   nome_serie varchar(255),
   id_editora int NOT NULL,
   PRIMARY KEY(id_serie),
   CONSTRAINT fk_editora_id FOREIGN KEY (id_editora) references editora(id_editora) on delete cascade
) ENGINE=INNODB;

Mensagens do MySQL :

#1005 - Can't create table 'sistemagibis.serie' (errno: 150)

pelo que entendi das dicas do ouro fórum tenho que "criar um novo nome" e colocá-lo depois de CONSTRAINT.

Já olhei o exemplo que deu certo do "felipebath" umas 10xs e não consigo entender porque o dele funcionou e o meu não.

Alguém pode me explicar o que tá errado?

Agradeço desde já, Andrea

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

2 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'andreamussap'!

Você cometeu o mesmo erro que o "felipebath". Você criou campos com estruturas diferentes nas tabelas. Na tabela editora_gibi você criou o campo id_editora int UNSIGNED NOT NULL, o que está correto, pois um campo auto_increment deve ser inteiro sem sinal(positivo). Mas na tabela serie, você criou o campo id_editora int NOT NULL (inteiro sinalizado). Com isto você não conseguirá estabelecer a ligação entre as tabelas.

Solução:

CREATE TABLE serie (    id_serie int UNSIGNED  NOT NULL auto_increment,
   nome_serie varchar(255),
   id_editora int unsigned NOT NULL,
   PRIMARY KEY(id_serie),
   CONSTRAINT fk_editora_id FOREIGN KEY (id_editora) references editora(id_editora) on delete cascade
) ENGINE=INNODB;

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,4k
×
×
  • Criar Novo...