Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rafa_DB

Cannot add foreign key constraint(Query Browser Script Basico)

Recommended Posts

Pessoal, sou iniciante em banco de dados, meu script esta com um problema

 

- Cannot add foreign key constraint

 

gostaria de saber se, o jeito q eu defino minha chave primaria e estrangeira estao certo, e como resolver o erro acima, obrigado

 

CREATE DATABASE projeto;




CREATE TABLE tb_cliente(


 cd_cliente INT NOT NULL,
 nm_cliente VARCHAR(45),
 cd_cpf CHAR(11),
  constraint pk_cliente
 PRIMARY KEY(cd_cliente)
);


CREATE TABLE tb_unidade(


 cd_unidade INT NOT NULL,
 nm_unidade VARCHAR(30),
 constraint pk_unidade
 PRIMARY KEY(cd_unidade)
);


CREATE TABLE tb_categoria(


 cd_categoria INT NOT NULL,
 nm_categoria VARCHAR(30),
 constraint pk_categoria
 PRIMARY KEY(cd_categoria)


);


CREATE TABLE tb_fornecedor(


 cd_fornecedor INT NOT NULL,
 nm_fornecedor VARCHAR(45),
 cd_cnpj CHAR(14),
 constraint pk_fornecedor
 PRIMARY KEY(cd_fornecedor)


);






CREATE TABLE tb_pedido(




  cd_pedido INT NOT NULL,
  cd_cliente INT NOT NULL,
  dt_envio DATE,
  dt_pedido DATE,
  CONSTRAINT fk_cliente FOREIGN KEY (cd_cliente) REFERENCES tb_cliente(cd_cliente),
  constraint pk_pedido
  PRIMARY KEY(cd_pedido)


);


CREATE TABLE item_pedido(


 cd_pedido INT NOT NULL,
 cd_produto INT NOT NULL,
 qt_produto DECIMAL(9,2),
 CONSTRAINT fk_pedido FOREIGN KEY (cd_pedido) REFERENCES tb_pedido(cd_pedido),
 CONSTRAINT fk_produto FOREIGN KEY (cd_produto) REFERENCES tb_produto(cd_produto)
);


CREATE TABLE tb_produto(


 cd_produto INT NOT NULL,
 cd_unidade INT NOT NULL,
 CONSTRAINT fk_unidade FOREIGN KEY (cd_unidade) REFERENCES tb_unidade(cd_unidade),
 vl_unitario DECIMAL(9,2),
 cd_categoria INT NOT NULL,
 CONSTRAINT fk_categoria FOREIGN KEY (cd_categoria) REFERENCES tb_categoria(cd_categoria),
 constraint pk_produto
 PRIMARY KEY(cd_produto)


);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique antes de tudo a ordem a FK só pode ser criada se a respectiva PK tiver sido criada (tb_pedido x tb_produto por exemplo)

 

MySql tem também uma questão do tipo de tabela que aceita este tipo de Constraint (innodb creio)

 

http://dev.mysql.com/doc/refman/5.6/en/using-innodb-tables.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela item_pedido e tb_produto, foram as unicas que nao foram criadas, a tabela pedido, usa a chave primaria com constraint e funciona normalmente. Ja verifiquei a ordem, pra mim está certa, tem alguma outra ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela item_pedido faz referência a tb_produto (CONSTRAINT fk_produto) logo tb_produto precisa estar criada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui ^^, tirei as duas linhas de codigo a baixo

CONSTRAINT fk_unidade FOREIGN KEY (cd_unidade) REFERENCES tb_unidade(cd_unidade),
CONSTRAINT fk_categoria FOREIGN KEY (cd_categoria) REFERENCES tb_categoria(cd_categoria),

criei a tb_produto, dps criei a item_pedido, obrigado Motta

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.