Mysql
 sql >> Base de données >  >> RDS >> Mysql

vérifier la contrainte ne fonctionnera pas mysql

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