Malheureusement, MySQL ne prend pas en charge les contraintes de vérification SQL. Vous pouvez les définir dans votre requête DDL pour des raisons de compatibilité, mais ils sont simplement ignorés.
Il existe une alternative simple
Vous pouvez créer BEFORE INSERT
et BEFORE UPDATE
déclencher des déclencheurs qui provoquent une erreur ou définissent le champ sur sa valeur par défaut lorsque les exigences des données ne sont pas satisfaites.
Exemple de BEFORE INSERT
travail après MySQL 5.5
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test`
FOR EACH ROW
BEGIN
IF CHAR_LENGTH( NEW.ID ) < 4 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT := 'check constraint on Test.ID failed';
END IF;
END$$
DELIMITER ;
Avant MySQL 5.5, vous deviez provoquer une erreur, par exemple appeler une procédure non définie.
Dans les deux cas, cela provoque une annulation de transaction implicite. MySQL n'autorise pas l'instruction ROLLBACK elle-même dans les procédures et les déclencheurs.
Si vous ne voulez pas annuler la transaction (INSERT / UPDATE devrait passer même avec une "contrainte de vérification" échouée, vous pouvez écraser la valeur en utilisant SET NEW.ID = NULL
qui définira l'id sur la valeur par défaut des champs, cela n'a pas vraiment de sens pour un id tho
Edit:
Suppression du devis errant.
Concernant l' :=
opérateur:
Contrairement à =
, l' :=
opérateur n'est jamais interprété comme un opérateur de comparaison. Cela signifie que vous pouvez utiliser :=
dans n'importe quelle instruction SQL valide (pas seulement dans les instructions SET) pour attribuer une valeur à une variable.
https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
Concernant les guillemets d'identifiant backtick:
Le caractère de guillemet identifiant est le backtick («` »)
Si le mode SQL ANSI_QUOTES est activé, il est également permis de citer les identifiants entre guillemets doubles
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html