Mot clef : raiserror

Comment interdire une suppression MYSQL avec un Trigger

par Jean-françois JOLY le mar.29, 2010, dans Developpement Web

Récemment il s’est posé à moi une problématique très spécifique : Interdire une suppression dans une table qui est potentiellement consultable par plusieurs sources différentes. Bien sur ces sources ont toutes le maximum de droits et peuvent donc effectuer des requètes de suppression. Il se trouve que mystérieusement, des enregistrement de la table disparaissent tous les soirs … Il faut donc trouver une solution pour interdire la suppression dans cette table sans changer les droits. La solution la plus logique est d’utiliser un trigger pour interdire la suppression. Bien sur, sous oracle ou sql server, il aurait suffit de faire un simple RAISERROR u peu de cette manière :

1
2
3
4
5
6
CREATE TRIGGER forbidden_delete BEFORE DELETE ON matable   
FOR EACH ROW    
BEGIN     
RAISERROR ('Suppression interdite sur cette table', 16, 1);    
ROLLBACK TRANSACTION;
END;

Seulement voilà, je ne travaille pas sur du oracle ou du sql server, mais sur du mysql et RAISERROR ça n’existe pas (enfin à ma connaissance) sur la version 5.0.84. Du coup il faut trouver une alternative simple. Après moultes recherches, l’alternative existe : Pour faire échouer la requète de suppression, il faut faire planter le trigger. Si le trigger plante, la requète ne s’effectue pas. Qu’à celà ne tienne, voilà un excellent moyen de faire planter un trigger :

1
2
3
4
5
6
7
8
DELIMITER //
DROP TRIGGER IF EXISTS forbidden_delete//    
CREATE TRIGGER forbidden_delete BEFORE DELETE ON matable
FOR EACH ROW
BEGIN
SELECT 'a' INTO @toto;
SELECT 'b','c' INTO @toto;
END;//

A chaque delete sur la table matable, la requète de suppression va lamentablement échouer car le trigger va échouer.
Voilà c’était l’astuce du jour en espérant qu’elle soit utile à quelqu’un ;-) .

4 Commentaires :, , , , , plus...

A la recherche de quelque chose ?

Utiliser ce champs pour faire votre recherche :

Vous n'avez pas trouvé votre bonheur ? N'hésitez pas à contacter l'auteur de ce blog ou alors laissez un commentaire sur un post !

Les liens !

Quelques liens intéressants...

Les archives

Tout, classé par ordre chronologique ...