[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!