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

MySql Erro, ERROR 1215 (HY000): Cannot add foreign key constraint

Estou usando MySQL pra fazer os exercícios mas não estou conseguindo adicionar a foreign key na tabela de produtos.

Colunas Tabela categorias

mysql> show columns from categorias;

+-------+------------------+------+-----+---------+

| Field | Type | Null | Key | Default | Extra |

+-------+------------------+------+-----+----------+

| id | int(10) unsigned | NO | PRI | NULL | |

| nome | varchar(60) | NO | | NULL | |

+-------+------------------+------+-----+-----------

2 rows in set (0.01 sec)

Colunas Tabela produtos

mysql> show columns from produtos;

+-----------+--------------+------+-----+--------- --

| Field | Type | Null | Key | Default | Extra |

------+--------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| nome | varchar(60) | YES | | NULL | |

| descricao | varchar(150) | YES | | NULL | |

----+--------------+------+-----+---------+---------+

3 rows in set (0.00 sec)

mysql> alter table produtos add column idcategoria integer,add index idcategoria_idx (idcategoria ASC),add constraint idcategoria foreign key(idcategoria) references categorias (idcategoria) on delete no action on update no action;

ERROR 1215 (HY000): Cannot add foreign key constraint

4 respostas

Olá Vanderson,

na hora de chamar o references categorias tem que passar o nome da coluna da tabela de categorias que é a chave primária, que no caso é id e não idcategoria.

mysql> alter table produtos add column idcategoria integer(10) unsigned not null,add index idcategoria_idx (idcategoria ASC),add constraint idcategoria foreign key(idcategoria) references categorias (id) on delete no action on update no action;

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (loja_virtual.#sql-b84_3e, CONSTRAINTidcategoriaFOREIGN KEY (idcategoria) REFERENCEScategorias(id) ON DELETE NO ACTION ON UPDATE NO ACTION)

mysql> alter table produtos add column idcategoria integer(10) unsigned not null,add index idcategoria_idx (idcategoria ASC),add constraint idcategoria foreign key(id) references categorias (id) on delete no action on update no action;

ERROR 1215 (HY000): Cannot add foreign key constraint

mysql> alter table produtos add column idcategoria integer(10) unsigned not null,add index idcategoria_idx (idcategoria ASC),add constraint idcategoria foreign key(id) references categorias (idcategoria) on delete no action on update no action;

ERROR 1215 (HY000): Cannot add foreign key constraint mysql>

solução!

O que está certinho é o primeiro que você mandou de

add constraint idcategoria foreign key(idcategoria) references categorias (id) on delete no action on update no action

No caso você já tem registros salvos na tabela de produtos? Se sim, meu palpite é que esse erro que ele está dando na hora de adicionar o foreing key é por conta que os registros não terão na coluna idcategoria que corresponda a algum valor na tabela categorias.

Faz um teste, primeiro só cria a coluna de idcategoria, preenche todos os registros com o id de alguma categoria e depois adicione a foreing key.

Muito Obrigado era isso mesmo. Vou ser mais atencioso na próxima vez.