Maison  >  Article  >  base de données  >  Les déclencheurs MySQL peuvent-ils empêcher l’échec des opérations INSERT ?

Les déclencheurs MySQL peuvent-ils empêcher l’échec des opérations INSERT ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-14 09:56:02475parcourir

Can MySQL Triggers Prevent INSERT Operations from Failing?

Provoquer l'échec des INSERTs avec des déclencheurs

Bien que les déclencheurs dans MySQL puissent modifier les données avant une insertion ou une mise à jour, on pensait initialement qu'ils pouvaient n’empêche pas l’opération d’échouer. Cependant, une exploration plus approfondie a révélé qu'il existe des méthodes pour obtenir cette fonctionnalité.

Solution de contournement de MySQL

Dans les versions MySQL 5.0 et 5.1, une solution de contournement peut être utilisée pour abandonner un déclencher et fournir un message d’erreur. Cela implique d'essayer d'accéder à une colonne inexistante :

CREATE TRIGGER mytabletriggerexample
BEFORE INSERT
FOR EACH ROW
BEGIN
IF(NEW.important_value) < (fancy * dancy * calculation) THEN
    DECLARE dummy INT;

    SELECT Your meaningful error message goes here INTO dummy 
        FROM mytable
      WHERE mytable.id=new.id
END IF; END;

Si la condition est remplie, le déclencheur tente de sélectionner le message d'erreur dans une table inexistante, provoquant l'échec de l'insertion avec le message fourni. .

Autres SGBDR

La possibilité de lever une exception dans un déclencheur et d'abandonner l'opération n'est pas universellement prise en charge dans tous les SGBDR. Cependant, certaines bases de données proposent des mécanismes alternatifs pour gérer les erreurs de validation dans les déclencheurs. Par exemple :

  • PostgreSQL : La commande RAISE EXCEPTION peut être utilisée pour déclencher une exception et fournir un message d'erreur.
  • Oracle : L'instruction SIGNAL permet de déclencher des avertissements ou des erreurs au sein d'un déclencheur.

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!

Déclaration:
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