Dans ma base de données mysql, j'ai deux revues de table et produits

mysql> desc review;
+---------------+--------------+------+-----+-------------------+----------------+
| Field         | Type         | Null | Key | Default           | Extra          |
+---------------+--------------+------+-----+-------------------+----------------+
| id            | int(11)      | NO   | PRI | NULL              | auto_increment |
| review        | varchar(255) | YES  |     | NULL              |                |
| rating        | varchar(255) | YES  |     | NULL              |                |
| created_at    | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
| updated_at    | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
| reviewer_name | varchar(255) | YES  |     | NULL              |                |
| product_id    | int(11)      | YES  |     | NULL              |                |
+---------------+--------------+------+-----+-------------------+----------------+

mysql> desc products;
+---------+------------------+------+-----+---------+----------------+
| Field   | Type             | Null | Key | Default | Extra          |
+---------+------------------+------+-----+---------+----------------+
| id      | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name    | varchar(255)     | NO   |     | NULL    |                |
| details | text             | NO   |     | NULL    |                |
+---------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

Lorsque j'essaie de faire de product_id dans la table d'examen comme clé étrangère qui fait référence à l'id dans la table products, j'ai trouvé cette erreur et la requête que j'ai donnée était:

mysql> ALTER TABLE review ADD FOREIGN KEY (product_id) REFERENCES products(id);
ERROR 1215 (HY000): Cannot add foreign key constraint

S'il vous plaît, aidez-moi à découvrir quel est le problème et comment puis-je le résoudre

-1
Karthiga 21 avril 2017 à 08:21

3 réponses

Meilleure réponse

Il peut y avoir deux raisons à l'erreur.

La précision du type de données est différente pour deux colonnes, c'est-à-dire

products -> id | int(10) unsigned  // here int(10)
product_id     | int(11)           // here int(11)

Rendre la précision identique en modifiant la structure du tableau

Pour créer une relation de clé étrangère, la colonne de la table parent doit être colonne unique ou principale.

Vérifiez donc si products(id) est primaire ou unique, sinon rendez-le primaire ou unique.

1
Mayank Pandeyz 21 avril 2017 à 05:26

Modifier la structure de votre table

id | int (11)

Ou définir

product_id | int (10) non signé

Faites ce qui est le mieux pour vous. vous pouvez également obtenir une meilleure compréhension de FOREIGN KEY à partir de ici

0
Community 23 mai 2017 à 11:47

La "précision" des types int ne signifie rien. C'est juste un indice pour la largeur d'affichage. Cela ne change rien à la taille du type de données.

Ce qui a causé votre erreur était que votre products.id était int unsigned, mais vous essayiez de déclarer une clé étrangère pour review.product_id qui était int (signée).

La différence entre les entiers signés et non signés était ce qui rend les types de données incompatibles pour l'intégrité référentielle. Vous pourriez en créer un int(10) unsigned et l'autre int(327) unsigned et ce serait bien.

2
Bill Karwin 21 avril 2017 à 05:32