Maison  >  Article  >  base de données  >  Comprendre le rôle des clés étrangères dans MySQL

Comprendre le rôle des clés étrangères dans MySQL

coldplay.xixi
coldplay.xixiavant
2020-08-31 16:59:362534parcourir

Comprendre le rôle des clés étrangères dans MySQL

[Recommandations d'apprentissage associées : apprentissage mysql]

Le rôle des clés étrangères MySQL :

Maintenir la cohérence et l'intégrité des données L'objectif principal est de contrôler les données stockées dans la table de clés étrangères. Pour associer deux tables, les clés étrangères ne peuvent référencer que les valeurs des colonnes de la table !

Construisons deux tables

CREATE TABLE `example1` (
  `stu_id` int(11) NOT NULL DEFAULT '0',
  `course_id` int(11) NOT NULL DEFAULT '0',
  `grade` float DEFAULT NULL,
  PRIMARY KEY (`stu_id`,`course_id`)
);
CREATE TABLE `example2` (
  `id` int(11) NOT NULL,
  `stu_id` int(11) DEFAULT NULL,
  `course_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `f_ck` (`stu_id`,`course_id`),
  CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example1` (`stu_id`, `course_id`)
);
insert into example1 (stu_id,course_id,grade)values(1,1,98.5),(2,2,89);
insert into example2 (id,stu_id,course_id)values(1,1,1),(2,2,2);

Nous avons construit la table

exemple1, qui contient le numéro d'étudiant stu_id, le numéro de cours course_id et la note

exemple2 table, qui contient l'identifiant, le numéro d'étudiant stu_id, le numéro de cours course_id, puis créez des clés étrangères

pour insérer des données dans les deux tables respectivement.

Nous appelons stu_id et course_id dans exemple2 les clés étrangères de la table exemple2. exemple1 est la table parent et exemple2 est la table de mots. Les deux tables sont liées. Les données de la table de mots doivent être supprimées avant la table de mots. La table parent peut être supprimée. Les données correspondantes dans

Supprimons maintenant une donnée dans l'exemple1

delete from example1 where stu_id=2;

trouvera une erreur

ERREUR 1451 (23000) : Impossible de supprimer. ou mettre à jour une ligne parent : une contrainte de clé étrangère échoue (`test`.`example3`, CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example2` (`stu_id`, `course_id`))

car exemple2 Les données dans sont associées aux données de l'exemple1, qui ne peuvent pas être supprimées et servent de clé étrangère

Ensuite, nous supprimons d'abord les données de la table exemple2, puis supprimons le données dans la table exemple1

supprimer de l'exemple2 où stu_id=2 ;
supprimer de l'exemple 1 où stu_id=2;

Ceci est réussi

Restrictions de déclenchement d'événements :

lors de la suppression et de la mise à jour, la cascade de paramètres peut être définie ( suivre les modifications de clé étrangère), restreindre (restreindre les modifications de clé étrangère dans la table), définir Null (définir la valeur nulle), définir Default (définir la valeur par défaut), [par défaut] aucune action

Jetons un coup d'œil à l'événement déclencher des restrictions A quoi ça sert. . .

Nous supprimons d'abord la clé étrangère, puis rétablissons la clé étrangère avec des restrictions de déclenchement d'événements

alter table example2 drop Foreign key f_ck; alter table example2 add CONSTRAINT `f_ck` FOREIGN KEY ( `stu_id` , `course_id`) RÉFÉRENCES `example1` (`stu_id`, `course_id`) ON DELETE CASCADE ON UPDATE CASCADE;

Vérifions d'abord les données

mysql> example1;select * from example2;
+--------+-----------+-------+

| stu_id | course_id | grade |

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

|      1 |         1 |  98.5 |

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

1 row in set (0.00 sec)

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

| id | stu_id | course_id |

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

|  1 |      1 |         1 |

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

1 row in set (0.00 sec)

À ce moment, le stu_id et le course_id dans example1 et example2 sont tous deux 1,

Modifiez les données dans la table example1 et voyez

mettre à jour l'exemple1 définir stu_id =3,course_id=3 où stu_id=1;

Vérifiez à nouveau les données

mysql> sélectionnez * dans l'exemple1;sélectionnez * dans l'exemple2;
+--------+-----------+-------+

| stu_id | course_id | grade |

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

|      3 |         3 |  98.5 |

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

1 row in set (0.00 sec)

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

| id | stu_id | course_id |

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

|  1 |      3 |         3 |

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

1 row in set (0.00 sec)

Avez-vous trouvé que, exemple1 et stu_id et course_id dans l'exemple2 sont devenus 3

Nous allons supprimer les données de la table exemple1

supprimer de l'exemple1 où stu_id=3;

Vous constaterez qu'il peut être supprimé et les données de l'exemple 2 ont disparu.

En fait, c'est le rôle des clés étrangères, pour maintenir la cohérence et l'intégrité des données ; les changer ensemble est déterminé par le déclencheur de l'événement ;

Recommandations d'apprentissage associées : Vidéos de programmation

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer