J'ai un tableau nommé Tableau1 avec trois colonnes col1 , col2 , col3 . col1 peut avoir l'une des trois valeurs (1 ou 2 ou 3).
Je dois ajouter une contrainte de vérification telle qu'elle vérifie, si col1 a la valeur 1 alors les valeurs de col2 et col3 devraient être les mêmes sinon si col1 a des valeurs 2 ou 3, alors les valeurs col2 et col3 peuvent ou non être identiques .
Quelqu'un peut-il me dire comment ajouter la contrainte pour cela?
Merci d'avance.
3 Réponses :
Vous pouvez exprimer ces conditions avec une série d'opérateurs logiques:
(col IN (1, 2, 3)) AND (col2 = col3 OR col1 IN (2, 3)
Je n'ai pas vérifié (je n'ai pas MySql) mais dans Oracle les travaux suivants:
ALTER TABLE Table1 ADD ( CONSTRAINT CHK_1 CHECK ((col1 BETWEEN 1 AND 3) AND (col1 <> 1 OR col2=col3)) )
Je peux vous dire que cela ne fonctionne pas dans MySQL, à la place, vous pouvez utiliser une vue avec option de contrôle dans MySQL qui peut faire le idem
@RaymondNijland vous avez probablement raison (je ne connais pas vraiment mysql) mais w3schools.com/ sql / sql_check.asp indique que cela devrait fonctionner.
Attendez ... MySQL 8.0.16 (pas encore publié, disponibilité générale) devrait le supporter enfin .. Pour les cas généraux, je ne conseillerai pas d'utiliser w3schools pour la documentation SQL.
Vous pouvez ajouter une contrainte de vérification comme celle-ci:
ALTER TABLE Table1 ADD CONSTRAINT chk_table1_cols CHECK ( (col1 = 1 AND col2 = col3) OR (col1 IN (2, 3)) );
Notez que "est le même" suppose que les valeurs ne sont pas NULL
. Cette logique peut être ajoutée si vous souhaitez considérer les valeurs NULL
comme égales.