我正在开发一个市场平台,我将用户余额存储为余额变化表,以及用户行中预先计算的值。这使我可以轻松检查其余额,但仍会按特定时间间隔重新计算,以确保它们保持同步。
以下是余额更改表的示例:
| id | opening_balance | closing_balance | user_id |
|----|-----------------|-----------------|---------|
| 1 | 23.40 | 28.20 | 6 |
| 2 | 14.70 | 11.10 | 79 |
| 3 | 117.12 | 107.12 | 20 |
插入新行后,我想更新balance
与新插入的user_id
关系的closing_balance
列。
从我在网上找到的内容来看,我得到的是以下内容,而不是Postgresql。
CREATE TRIGGER balance_update
AFTER INSERT ON balance_history
FOR EACH ROW
BEGIN
UPDATE users
SET balance = NEW.closing_balance
WHERE id = NEW.user_id;
END;
看起来Postgresql要求您在创建触发器之前创建命名过程?不确定转换它的最佳方法。
答案 0 :(得分:1)
Postgres中的触发器具有比MySQL更复杂的语法,因为它们将执行过程作为操作。在这种情况下,我们可以定义一个函数,该函数将在第一个表上插入时执行所需的更新。
CREATE OR REPLACE FUNCTION your_proc()
RETURNS trigger AS
$$
BEGIN
UPDATE users
SET balance = NEW.closing_balance
WHERE id = NEW.user_id;
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql';
CREATE TRIGGER balance_update
AFTER INSERT ON balance_history
FOR EACH ROW
EXECUTE PROCEDURE your_proc();