Sie brauchen kein UPDATE innerhalb eines Triggers. Sie können den Wert NEW.votes_used zuweisen
Verwenden Sie so etwas wie:
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;
Oder
BEGIN
NEW.votes_used := LEAST(NEW.votes_used, (SELECT votes_available
FROM vote_totals
WHERE vote_totals.userID = NEW.user_id));
RETURN NEW;
END;
Dies muss ein BEFORE UPDATE sein Auslöser zur Arbeit. (Und wie alle BEFORE UPDATE Trigger muss es RETURN NEW ).
Wenn Sie Check Constraint mit Trigger emulieren möchten, versuchen Sie etwas wie:
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;