Un déclencheur MySQL peut-il répliquer une contrainte CHECK ?
La contrainte CHECK est une fonctionnalité utile dans d'autres systèmes SGBDR qui permet d'appliquer des conditions spécifiques sur les valeurs des colonnes. Cependant, MySQL ne prend pas en charge nativement les contraintes CHECK. Cela pose un défi aux développeurs qui souhaitent implémenter des fonctionnalités similaires.
Une solution potentielle à ce problème consiste à utiliser des déclencheurs MySQL. Les déclencheurs sont des objets de base de données qui effectuent des actions spécifiques lorsque certains événements se produisent, tels que l'insertion, la mise à jour ou la suppression de données d'une table. En créant un déclencheur, vous pouvez définir un ensemble de conditions qui doivent être remplies avant qu'une opération sur la table puisse être exécutée.
Renvoyer une erreur avec un déclencheur
Bien que les déclencheurs puissent être utilisés pour définir des valeurs par défaut pour les champs, il est également possible de construire un déclencheur qui renvoie une erreur si une condition n'est pas remplie. Cela nous permet de simuler le comportement d'une contrainte CHECK.
Par exemple, créons un déclencheur qui vérifie la colonne mois de la table des statistiques et renvoie une erreur si la valeur est supérieure à 12. Ce comportement imite le Contrainte CHECK :
Pour les opérations INSERT :
delimiter $$ create trigger chk_stats before insert on stats for each row begin if new.month>12 then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot add or update row: only'; end if; end; $$
Pour les opérations UPDATE :
delimiter $$ create trigger chk_stats1 before update on stats for each row begin if new.month>12 then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot add or update row: only'; end if; end; $$
En utilisant ces déclencheurs, nous pouvons effectivement créer une contrainte CHECK de substitution dans MySQL et appliquer les conditions souhaitées sur la colonne du mois avant que toute opération INSERT ou UPDATE ne soit effectuée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!