Maison > base de données > tutoriel mysql > Les déclencheurs MySQL peuvent-ils simuler les contraintes CHECK ?

Les déclencheurs MySQL peuvent-ils simuler les contraintes CHECK ?

Linda Hamilton
Libérer: 2024-11-13 07:45:02
original
781 Les gens l'ont consulté

Can MySQL Triggers Simulate CHECK Constraints?

Émulation des contraintes CHECK avec des déclencheurs MySQL

Dans MySQL, les contraintes CHECK, généralement utilisées pour garantir l'intégrité des données, ne sont pas entièrement prises en charge comme dans d'autres SGBDR. Cependant, il est possible de simuler leur fonctionnalité à l'aide de déclencheurs.

Est-il possible de construire un déclencheur retournant une erreur ?

Oui, il est possible de créer un déclencheur qui renvoie une erreur si une condition spécifiée n'est pas remplie. Cela émule efficacement le comportement d'une contrainte CHECK.

Exemple de déclencheur pour les mises à jour

Pour créer un déclencheur qui renvoie une erreur lors des mises à jour, utilisez le modèle suivant :

CREATE TRIGGER <trigger_name> BEFORE UPDATE ON <table_name>
FOR EACH ROW
BEGIN
  IF (condition_not_met) THEN
    SIGNAL SQLSTATE '45000';
    SET MESSAGE_TEXT = 'Error message';
  END IF;
END;
Copier après la connexion

Par exemple, pour vérifier que la valeur du mois dans le tableau "stats" est inférieure ou égale à 12 avant la mise à jour :

CREATE TRIGGER chk_stats1 BEFORE UPDATE ON stats
FOR EACH ROW
BEGIN
  IF (new.month > 12) THEN
    SIGNAL SQLSTATE '45000';
    SET MESSAGE_TEXT = 'Month must be less than or equal to 12';
  END IF;
END;
Copier après la connexion

Exemple de déclencheur pour les insertions

De même, pour les insertions :

CREATE TRIGGER <trigger_name> BEFORE INSERT ON <table_name>
FOR EACH ROW
BEGIN
  IF (condition_not_met) THEN
    SIGNAL SQLSTATE '45000';
    SET MESSAGE_TEXT = 'Error message';
  END IF;
END;
Copier après la connexion

Par exemple, pour vérifier la valeur du mois avant de l'insérer dans la table "stats" :

CREATE TRIGGER chk_stats BEFORE INSERT ON stats
FOR EACH ROW
BEGIN
  IF (new.month > 12) THEN
    SIGNAL SQLSTATE '45000';
    SET MESSAGE_TEXT = 'Month must be less than or equal to 12';
  END IF;
END;
Copier après la connexion

Ces déclencheurs simulent le comportement des contraintes CHECK, empêchant l'insertion ou la mise à jour des données si les conditions spécifiées ne sont pas respectées.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal