MySQL : des triggers à la place des check constraints !
Le moteur de base de données relationnel Open Source MySQL ne dispose toujours pas à ce jour de CHECK CONSTRAINT, ce qui a l’inconvénient de nous amener à coder très inutilement ! Dans Oracle, PostgreSQL, SQL Server par exemple, cette clause permet de définir une contrainte sur champ, une contrainte sur table. La seule possibilité de contrainte sous MySQL est la clause NOT NULL !
Création de trigger sous MySQL
Dans l’exemple ci-dessous, le trigger – ou déclencheur in French – convertit automatiquement le champ contact_ville en majuscules avec la fonction UPPER.
DELIMITER $$ DROP TRIGGER IF EXISTS grc.client_before_insert$$ CREATE TRIGGER grc.client_before_insert BEFORE INSERT ON grc.client FOR EACH ROW BEGIN set NEW.client_ville=UPPER(NEW.client_ville); END $$ DELIMITER;
Un trigger en forme de check constraint !
Il s’agit dans l’exemple de forcer à ce que le mail saisi respecte un certain format en nous appuyant sur les expressions régulières ! Le code mérite d’être affiné. Pensez à ajouter un autre trigger sur l’événement BEFORE UPDATE !
DELIMITER $$ DROP TRIGGER grc.contact_before_insert $$ CREATE TRIGGER grc.contact_before_insert BEFORE INSERT ON grc.contact FOR EACH ROW BEGIN IF NOT NEW.contact_email REGEXP '^[a-z0-9]+@[a-z0-9]+\.(fr|com)$' THEN SET NEW.contact_email = NULL; END IF; END; $$ DELIMITER;