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')
Était-ce utile?

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.

Dans le manuel de référence :

  

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.

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