Vous n'avez pas besoin de UPDATE
à l'intérieur d'un déclencheur. Vous pouvez attribuer la valeur à NEW.votes_used
Utilisez quelque chose comme :
BEGIN
IF (NEW.votes_used > (SELECT votes_available FROM vote_totals
WHERE vote_totals.user_id = NEW.user_id)) THEN
NEW.votes_used := (SELECT votes_available FROM vote_totals
WHERE vote_totals.userID = NEW.user_id);
END IF;
RETURN NEW;
END;
Ou
BEGIN
NEW.votes_used := LEAST(NEW.votes_used, (SELECT votes_available
FROM vote_totals
WHERE vote_totals.userID = NEW.user_id));
RETURN NEW;
END;
Cela doit être un BEFORE UPDATE
déclencheur pour fonctionner. (Et comme tous BEFORE UPDATE
déclenche il doit RETURN NEW
).
Si vous souhaitez émuler la contrainte de vérification avec le déclencheur, essayez quelque chose comme :
BEGIN
IF (NEW.votes_used > (SELECT votes_available
FROM vote_totals
WHERE vote_totals.user_id = NEW.user_id))
THEN RAISE EXCEPTION 'Not enough votes';
END IF;
RETURN NEW;
END;