Comme promis, voici un nouvel article qui cette fois se veut technique !
Au cours de ce billet, nous allons voir comment pallier l’absence de la directive CHECK dans MySQL dans un cas bien précis.
Le problème
Sous Oracle, il est possible d’indiquer qu’un champ d’une table doit être par exemple stocké en majuscule et ce directement dans le script de création de la table.
Par exemple, dans le script suivant, peu importe la casse d’origine, le nom de l’élève sera systématiquement stocké en majuscule :
1 2 3 4 5 |
|
Oui, mais voilà, si MySQL ne détecte aucune erreur lors de la soumission du script, il ne prendra jamais en compte le fameux CHECK.
La solution
Une solution (parmi d’autres, j’en suis sûr) est d’utiliser les triggers.
Qu’est-ce qu’un trigger ?
Un trigger (ou déclencheur en français) est une petite fonction qui s’exécute en fonction des actions qui se déroulent sur la base de données (insertion, mise à jour, suppression, etc.).
Dans notre cas, il faudra utiliser deux triggers pour que le nom de l’élève soit automatiquement mis en majuscule :
- Un premier lors de l’insertion d’un nouvel élève ;
- Une seconde lors de la mise à jour d’un élève.
Insertion de l’élève
Le but est ici de mettre à jour la donnée avant qu’elle ne soit insérée dans la base de données. Voici ce que ça donne :
1 2 3 4 5 6 |
|
Bien évidemment, le faire après l’insertion n’est pas impossible, mais c’est déjà plus compliqué puisqu’il faut récupérer l’identifiant de la dernière entrée dans la base de données et jongler entre les nouvelles valeurs (NEW) et les anciennes (OLD) du camps concernés.
Mise à jour de l’élève
Le principe est exactement le même, sauf qu’ici nous allons changer le moment où le trigger doit se déclencher.
En effet, le trigger ne doit plus se déclencher avant une insertion, mais avant une mise à jour.
Voici alors ce que nous obtenons :
1 2 3 4 5 6 |
|
Voilà, vous savez maintenant pallier l’absence du CHECK dans MySQL :)
A lire aussi…