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

Foreign Key - Insere comprador_id inexistente.

Dei o comando para criar a foreign key:

alter table compras add foreign key(comprador_id) references compradores(
id);

E ao inserir na tabela com um comprador_id que não existe na tabela dos compradores(no caso com o número 100), não ocorre nenhuma mensagem de alerta como mostrado no vídeo, pelo contrário, o número é aceito e adicionada a linha na tabela, mesmo não existindo o 100 na tabela dos compradores.

insert into compras (valor, data, observacoes, forma_pagt, comprador_id)
values (110.5, '2015-08-21', 'Presente familia', 'boleto', 100);
4 respostas

Boa tarde Henrique.

Poderia postar para nós como estão as CONSTRAINTS da tabela compras?

Segue comando:

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,    
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_NAME = 'compras';

E também o resultado do comando abaixo:

SHOW CREATE TABLE compras

Falou.

Realizei o primeiro comando, mas deu uma mensagem erro, acredito que fiz alguma coisa errada nesse comando.

O Segundo comando deu o seguinte resultado:

| compras | CREATE TABLE `compras` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `valor` double DEFAULT NULL,
  `data` date DEFAULT NULL,
  `descricao` varchar(50) DEFAULT NULL,
  `observacoes` varchar(255) DEFAULT NULL,
  `recebido` tinyint(1) DEFAULT NULL,
  `forma_pagt` enum('cartao','boleto','dinheiro') DEFAULT NULL,
  `comprador_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `comprador_id` (`comprador_id`)
) ENGINE=MyISAM AUTO_INCREMENT=43 DEFAULT CHARSET=latin1 |
solução!

Boa tarde Henrique.

Olhando o resultado do segundo comando, podemos verificar que a tabela usa a engine MyISAM.

Essa engine não suporta foreign keys. Você pode confirmar isso no link abaixo:

https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html

Para ter suporte a esse recurso, você precisa alterar a engine da tabela para InnoDB.

O comando abaixo pode converter:

ALTER TABLE compras ENGINE=InnoDB;

Depois de feito isso, crie novamente a chave estrangeira e refaça os testes.

Espero ter colaborado.

Realizei a alteração da engine para InnoDB nas duas tabelas e funcionou a Foreign Key depois disso. Muito obrigado Andre!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software