Maison  >  Article  >  base de données  >  Résumé de l'établissement des tables parents de test, des tables enfants et des cas de test dans Mysq

Résumé de l'établissement des tables parents de test, des tables enfants et des cas de test dans Mysq

php是最好的语言
php是最好的语言original
2018-08-01 15:06:232401parcourir

Créer une table de test

Afficher les informations sur la version

select version();
5.7.22

Créer une table parent

drop table if exists Models;
CREATE TABLE Models
  (
    ModelID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
   Name VARCHAR(40) NOT NULL,
    PRIMARY KEY (ModelID)
);

Créer une table enfant

drop table if exists Orders;
CREATE TABLE Orders
  (
    ID          SMALLINT UNSIGNED NOT NULL PRIMARY KEY,
   ModelID     SMALLINT UNSIGNED NOT NULL,
     Description VARCHAR(40),
    FOREIGN KEY (ModelID) REFERENCES Models (ModelID)
      ON DELETE cascade
  );

Test

Cas de test - il n'y a pas de données correspondantes dans la table parent, insérez d'abord la table enfant

insert into Orders(Id,ModelID,Description) values (1,1,'a');

Résultat : échec de l'exécution
Exception : [2018-07-31 11:08 :01] 23000 Impossible d'ajouter ou de mettre à jour une ligne enfant : une contrainte de clé étrangère échoue (bov.Orders, CONSTRAINT Orders_ibfk_1 FOREIGN KEY (ModelID) REFERENCES Models (ModelID) ON DELETE CASCADE)
Raison : échec de la vérification des contraintes de clé étrangère lors de la suppression en cascade

Scénario de test : insérer d'abord les données de la table principale, puis insérer les données de la sous-table

insert into Models(ModelID,Name) values (1,'a');
insert into Orders(Id,ModelID,Description) values (1,1,'a');

Résultat : exécution réussie

select * from Models;
1    a

select * from Orders;
1    1    a

Cas de test - Les tables parent et enfant contiennent des données, supprimez les données de la table enfant

delete from Orders where id = 1;

Résultat : Exécution réussie

select * from Models;
1    a
select * from Orders;
为空

Cas de test - Les deux Les tables parent et enfant ont des données, supprimez la bibliothèque de tables parent

delete from Models where ModelID = 1;

Résultat : Exécution réussie

select * from Models;
为空
select * from Orders;
为空

Scénario de test - les tables parent et enfant ont des données, mettez à jour les clés étrangères du table enfant

update Orders set ModelID = 3 where ID =1;

Résultat : Échec de l'exécution
Exception : [2018-07-31 12:33:02] 23000 Impossible d'ajouter ou de mettre à jour une ligne enfant : une contrainte de clé étrangère échoue (bov .Orders, CONTRAINTE Orders_ibfk_1 CLÉ ÉTRANGÈRE (ModelID) RÉFÉRENCES Models (ModelID) SUR LA CASCADE DE SUPPRESSION)
Cause : échec de la vérification de la contrainte de clé étrangère lors de la suppression en cascade

Test cas - les tables parent et enfant contiennent des données, mettez à jour la clé primaire de la table parent

update Models set ModelID = 2 where ModelID =1;

Résultat : échec de l'exécution
Exception : [2018-07-31 12:34:24] 23000 Impossible supprimer ou mettre à jour une ligne parent : une contrainte de clé étrangère échoue (bov.Orders, CONSTRAINT Orders_ibfk_1 FOREIGN KEY (ModelID) REFERENCES Models (ModelID) ON DELETE CASCADE)
Cause : Échec de la vérification des contraintes de clé étrangère lors de la suppression en cascade

Cas de test - table parent-enfant Les deux ont des données, mettez à jour la clé non étrangère de la table enfant

update Orders set Description = 'b' where ID =1;

Résultat : exécuté avec succès

select * from Orders;
1    1    b

Scénario de test : les tables parent et enfant contiennent des données, mettez à jour la clé non primaire de la table parent

update Models set Name = 'c' where ModelID =1;

Résultat : exécution réussie

select * from Models;
1    c

Connexe articles :

Création d'index de base de données MySQL et tests de performances

Test de résistance mysql haute performance (résumé depuis longtemps)

Vidéos associées :

Tableau linéaire d'aventure de structure de données

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn