2012-09-20 4 views
3

Voici un tableau très basique pour illustrer ma question.Comment limiter une table auto-référencée dans MySQL pour qu'une ligne ne puisse pas se référencer?

CREATE TABLE Customer (
CustID   INT, 
CustLastName VARCHAR (20), 
ReferralID  INT, 
ADD CONSTRAINT PRIMARY KEY (CustID), 
ADD CONSTRAINT FOREIGN KEY (ReferralID) REFERENCES Customer(CustID) 
); 

Mon code actuel veille à ce que tous les anciens clients seulement qui ont CustID de peuvent être dans la colonne ReferralID (ils ont dit au client du magasin.) Cependant, le problème est rien n'empêche CustID d'égaler ReferralID dans le même rangée, ce qui est évidemment impossible. Un client ne peut pas se parler du magasin.

Fondamentalement, comment j'arrête CustID et ReferralID d'avoir la même valeur dans la même rangée?

Merci, Andrew

Répondre

1

Pour ce faire, vous voulez une contrainte CHECK. Cependant, MySQL n'a pas encore implémenté les contraintes CHECK, vous pouvez donc utiliser un trigger à la place.

connexes

+0

... bien que trompeusement, les contraintes de vérification sont autorisés à coder (pour la compatibilité avec d'autres bases de données) - ils sont tout simplement ignorés !? – Bohemian

+0

Oui. Du manuel: "La clause CHECK est analysée ** mais ignorée ** par tous les moteurs de stockage." –

+0

Hmm. Je n'ai aucune expérience avec les déclencheurs, (j'ai juste commencé ce cours) mais je vais essayer de comprendre quelque chose. Merci de m'avoir indiqué la bonne direction. –

Questions connexes