Je travaille actuellement sur un projet utilisant une base de données MySQL 5.0.41, et à cause de son rôle plutôt critique et du nombre de tables liées entre elles, je souhaiterais ajouter des contraintes d'intégrité référentielles. Malheureusement, c'est la première fois que je touche à ces bidules...
Disons que j'ai une table A contenant un ID et un nom, et une table B faisant référence à la table A pour désigner la personne concernée.
+----------- A -----------+ +----------- B -----------+
| id smallint(3) | | ... ............ |
| name varchar(255) | | who smallint(3) |
+-------------------------+ | ... ............ |
+-------------------------+
Maintenant, je voudrais qu'un enregistrement de la table A ne puisse être supprimé s'il en existe des références dans la table A, histoire de ne pas me retrouver avec un enregistrement en B faisant référence à quelqu'un qui n'existe plus.... Après plusieurs heures de recherches et d'essais, je me retrouve là :
CREATE TRIGGER a_before_delete BEFORE DELETE ON A FOR EACH ROW
BEGIN
IF EXISTS (SELECT * FROM B WHERE who = old.id)
BEGIN
RAISERROR ('Impossible de supprimer une personne encore référencée');
ROLLBACK TRANSACTION;
END;
END;
Malheureusement, ma syntaxe n'est pas bonne dans le.... if ?!
Un coup de main, s'y'ouplait ? C'est vraiment important ='(

Dans ce cas, disons que je préfère les triggers aux contraintes, histoire de pouvoir insérer dans une table log les éventuelles erreurs (ça, j'y arrive déjà ='P). Quelle est l'erreur de syntaxe dans mon bout de code ?
Aucune idée...