MySQL n'impose pas de contraintes de vérification.
Il s'agit d'un écart bien documenté par rapport à la norme SQL. (Bien que cela soit inattendu pour les non-initiés.)
Si vous avez besoin de la base de données MySQL pour appliquer une "contrainte de vérification", l'application doit être codée dans un BEFORE INSERT
et un BEFORE UPDATE
déclencheur.
Cette remarque :
est enterré dans le MySQL Reference Manual, sous le CREATE TABLE
syntaxe.
Référence :https://dev.mysql.com/doc /refman/5.5/en/create-table.html
AVERTISSEMENT SUR ENUM
Un ENUM
n'empêche pas l'insertion de valeurs "invalides" ; une valeur non valide est traduite en une chaîne de longueur nulle, un avertissement est émis, mais ce n'est pas une erreur.
Démonstration :
CREATE TABLE foo (gen ENUM('M','F'))
INSERT INTO foo (gen) VALUES ('x')
-- Warning Code : 1265
-- Data truncated for column 'gen' at row 1
SELECT gen, CHAR_LENGTH(gen) FROM foo;
-- gen CHAR_LENGTH(gen)
-- --- ----------------
-- 0