创建触发器以更新另一个表的更新表

时间:2017-10-07 14:57:51

标签: mysql sql triggers syntax-error

我有一个包含两个表的数据库。他们是,

顺序(用户ID,姓名,指数,总)

std::vector<int> mVec = {1,4,7,8,9,0};

// filter out values > 5
auto gtFive = select_T<int>(mVec, [](auto a) {return (a > 5); });

// or > target
int target = 5;
auto gt = select_T<int>(mVec, [target](auto a) {return (a > target); });

paynow(用户ID,totalpayment)

userid | total

sandun | 2500
sandun | 4800
akmal  | 1200

我需要在订单表中插入相应的userid时更新paynow表。所以我为此做了一个触发器。就在这里,

userid  | totalpayment
sandun  | 14000
akmal   | 22500

但是它给出了这个错误。

  

#1064 - 您的SQL语法出错;检查与您的MariaDB服务器版本对应的手册,以便在'WHEN(NEW.userid IS NOT NULL)附近使用正确的语法   更新paynow   SET totalpayment = totalpayment + N'在第5行

2 个答案:

答案 0 :(得分:1)

MySQL个触发器没有when子句。您可以改为使用if语句:

CREATE TRIGGER totals
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
IF NEW.userid IS NOT NULL THEN
    UPDATE paynow
    SET totalpayment = totalpayment + NEW.total
    WHERE userid = NEW.userid;
END IF;
END;

答案 1 :(得分:0)

data['date'] = data['date'].astype('datetime64[ns]') data.set_index('date').groupby('id').resample('Q')['data_1', 'data_2'].sum() data_1 data_2 id date 123 2017-06-30 10 10 2017-09-30 90 90 2017-12-31 110 110 2018-03-31 0 0 234 2017-06-30 20 20 2017-09-30 180 180 2017-12-31 220 220 2018-03-31 0 0 子句对查询来说是多余的。您可以将其删除:

when

如果CREATE TRIGGER totals AFTER INSERT ON orders FOR EACH ROW BEGIN UPDATE paynow SET totalpayment = totalpayment + NEW.total WHERE userid = NEW.userid; END; NEW.userid,则不会更新任何行。假设你有一个NULL的索引(我强烈强烈推荐),那么也没有那么多的性能损失。

此外,您是否关心paynow(userid)可能是NEW.total?我可以期待:

NULL