UPDATE
は必要ありません トリガー内。値をNEW.votes_used
に割り当てることができます
次のようなものを使用します:
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;
または
BEGIN
NEW.votes_used := LEAST(NEW.votes_used, (SELECT votes_available
FROM vote_totals
WHERE vote_totals.userID = NEW.user_id));
RETURN NEW;
END;
これはBEFORE UPDATE
である必要があります 動作するトリガー。 (そしてすべてのBEFORE UPDATE
トリガーする必要がありますRETURN NEW
。
トリガーを使用してチェック制約をエミュレートする場合は、次のようにしてみてください。
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;