Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Criação de FK

A primeira parte do exercício eu tentei

ALTER TABLE produtos ADD CONSTRAINT FK_CODIGO FOREIGN KEY (CODIGO) REFERENCES itens_notas (CODIGO_PRODUTO);

Não deu certo: Error Code: 1822. Failed to add the foreign key constraint. Missing index for constraint 'FK_CODIGO' in the referenced table 'itens_notas'

Então tentei inverter a Foreign Key, de itens_notas para produtos:

ALTER TABLE itens_notas ADD CONSTRAINT FK_CODIGO FOREIGN KEY (CODIGO_PRODUTO) REFERENCES PRODUTOS (CODIGO);

e aí funcionou! Qual a diferença?

4 respostas

Olá Felipe, tudo bem? Bem não tem diferença, é para funcionar nos dois casos sem grandes problemas, porém o erro no primeiro comando indica que o "índice está ausente", então a coluna estava realmente criado na tabela? Acho que esse pode ser o problemas, a coluna precisa está criada para depois possa ser uma FOREIGN KEY. Poderia mandar as colunas das duas tabelas aqui pra gente poder verificar?

Fico aguardando retorno!

Olá Jonilson! Obrigado pela resposta!

CRIAÇÃO DA TABELA PRODUTOS:

CREATE TABLE PRODUTOS (  
CODIGO VARCHAR(10) NOT NULL,
DESCRITOR VARCHAR (100) NULL,
SABORA VARCHAR (50) NULL,
TAMANHO VARCHAR (50) NULL,
EMBALAGEM VARCHAR (50) NULL,
PRECO_LISTA FLOAT NULL,
PRIMARY KEY (CODIGO));

CRIAÇÃO DA TABELA ITENS_NOTAS

Realizada com o assistente "Create table..."

Table name: itens_notas

schema: vendas_sucos

NUMERO              VARCHAR(5)      PK         NN
CODIGO_PRODUTO       VARCHAR (10)    PK         NN
QUANTIDADE           INT
PRECO                FLOAT

O que gerou o código

CREATE TABLE `sucos_vendas`.`itens_notas` (
  `NUMERO` VARCHAR(5) NOT NULL,
  `CODIGO_PRODUTO` VARCHAR(10) NOT NULL,
  `QUANTIDADE` INT NULL,
  `PRECO` FLOAT NULL,
  PRIMARY KEY (`NUMERO`, `CODIGO_PRODUTO`));

Abraços!

solução!

Penso que o erro aconteceu porque na tabela PRODUTOS, você só tinha uma chave, que no caso era a chave primária, então acho que deve ter sido por isso.

Jonilson , testei então retirar o NUMERO como PK da tabela itens notas. Refiz o processo inteiro, onde o assistente agora faz o seguinte comando:

CREATE TABLE `sucos_vendas`.`itens_notas` (
  `NUMERO` VARCHAR(5) NULL,
  `CODIGO_PRODUTO` VARCHAR(10) NOT NULL,
  `QUANTIDADE` INT NULL,
  `PRECO` FLOAT NULL,
  PRIMARY KEY (`CODIGO_PRODUTO`));

Dessa maneira, o comando

ALTER TABLE produtos ADD CONSTRAINT FK_CODIGO FOREIGN KEY (CODIGO) REFERENCES itens_notas (CODIGO_PRODUTO);

funcionou normalmente. Pra confirmar, refiz novamente incluindo NUMERO como PK no assistente, e o erro voltou. Obrigado pela solução!