MYSQL Constraint - Contrôles multiples
-
25-09-2019 - |
Question
Eh bien, je suis en train d'écrire ici quelques contraintes pour un db je travaille et je me demandais si je pouvais faire ce qui suit:
ALTER TABLE Course
ADD CONSTRAINT cs_level
CHECK (clevel in ('P','I','II','III'))
... au lieu de ceci:
ALTER TABLE Course
ADD CONSTRAINT cs_level
CHECK (clevel = 'P' OR clevel = 'I' OR clevel = 'II' OR clevel = 'III')
La solution
Même si MySQL appliqué les contraintes de CHECK
, je serais encore en train de créer une table de COURSE_LEVEL
:
-
COURSE_LEVEL_CODE
, VARCHAR (3), la clé primaire -
COURSE_LEVEL_DESCRIPTION
, VARCHAR (120)
... et créer une contrainte FOREIGN KEY sur la table COURSE
, colonne clevel
:
ALTER TABLE COURSE
ADD FOREIGN KEY (clevel) REFERENCES COURSE_LEVEL(COURSE_LEVEL_CODE)
Autres conseils
Malheureusement, MySQL ne supporte pas les contraintes CHECK-. Ils sont analysés, mais ignorés.
La clause CHECK est analysée mais ignorée par tous les moteurs de stockage.
Vous pouvez essayer de mettre cette contrainte de vérification dans votre logique métier avant d'insérer la ligne.
Joe Celko dit dans son livre de SQL Joe Celko pour Smarties :
Les petits produits "pseudo-SQL" sont apparus sur la scène open source. Langues telles que MySQL sont très différentes dans la syntaxe et la sémantique de SQL standard, étant souvent un peu plus d'une interface de système de fichiers avec des mots réservés empruntés
Un peu dure en effet, mais d'une manière qu'il est correct, car MySQL ne supporte pas un tas de fonctionnalités SQL standard.
MySQL ne supporte que les clés étrangères, et non pas les contraintes de vérification. Où que vous avez obtenu cette syntaxe de, il n'a pas été le manuel MySQL.