Bạn không cần UPDATE
bên trong một trình kích hoạt. Bạn có thể gán giá trị cho NEW.votes_used
Sử dụng một cái gì đó như:
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;
Hoặc
BEGIN
NEW.votes_used := LEAST(NEW.votes_used, (SELECT votes_available
FROM vote_totals
WHERE vote_totals.userID = NEW.user_id));
RETURN NEW;
END;
Đây phải là BEFORE UPDATE
kích hoạt để hoạt động. (Và như tất cả BEFORE UPDATE
kích hoạt nó phải RETURN NEW
).
Nếu bạn muốn mô phỏng ràng buộc kiểm tra với trình kích hoạt - hãy thử một cái gì đó như:
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;