Rafa_DB 0 Denunciar post Postado Outubro 13, 2015 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
Motta 645 Denunciar post Postado Outubro 13, 2015 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
Rafa_DB 0 Denunciar post Postado Outubro 13, 2015 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
Motta 645 Denunciar post Postado Outubro 13, 2015 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
Rafa_DB 0 Denunciar post Postado Outubro 14, 2015 então, mas a tb_produto esta com o mesmo erro, e nao consigo achar o erro Compartilhar este post Link para o post Compartilhar em outros sites
Rafa_DB 0 Denunciar post Postado Outubro 14, 2015 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