Question

J'ai les deux tables suivantes:

    Owner:

    O_ID P_ID
    Bob   Sam
    Steve Rex


    Pets

    P_ID O_ID
    Sam  Bob
    Rex  Steve

La deuxième colonne de propriétaires (P_ID) est une clé étrangère de la première colonne des animaux domestiques (P_ID).

Dans DB2, j'essaie d'ajouter une contrainte de restriction on_delete, de sorte que si quelqu'un devait essayer de supprimer un propriétaire dans la table du propriétaire, si ce propriétaire était propriétaire d'un animal de compagnie, l'opération de suppression serait rejetée.Je sais que je dois utiliser le commandement on_delete restreindre, mais je suis à perte de la manière de le faire.

J'ai essayé ceci:

ALTER TABLE OWNERS
ADD CONSTRAINT no_delete
FOREIGN KEY (P_ID)
REFERENCES PETS(P_ID)
ON DELETE RESTRICT

en vain.

Était-ce utile?

La solution

Votre syntaxe est correcte.Votre logique est fausse.

Vous voulez empêcher de supprimer un propriétaire s'il a un animal de compagnie dans la table "Animaux".Pour ce faire, vous devez modifier la table "Animaux" et ajouter une contrainte de clé étrangère faisant référence à la table "propriétaires".

Autres conseils

CatCall est correct, voici la commande de table d'alimentation correcte (testée dans DB2 LUW V9.7):

alter table animaux de compagnie Ajouter une contrainte NO_DELETE Touche étrangère (P_ID) Références Propriétaire (P_ID) sur Supprimer Restreindre;

Puis, lorsque j'ai essayé de supprimer Steve de la table du propriétaire avec la commande suivante:

Supprimer du propriétaire où O_ID= 'Steve';

J'ai reçu, comme prévu:

db21034e La commande a été traitée comme une déclaration SQL parce que ce n'était pas un Commande de processeur de ligne de commande valide. Pendant le traitement SQL, il est retourné: SQL0532N Une ligne parent ne peut pas être supprimé parce que la relation "Db2inst1.pets.no_delete" restreint la suppression. Sqlstate= 23001

Puis pour vous assurer que cela fonctionne complètement comme prévu, j'ai effacé le chien Steve:

Supprimer des animaux de compagnie où o_id= 'Steve'

et réaffirmer la tentative de supprimer Steve de la table du propriétaire et cela a fonctionné!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top