在表中插入if语句之前触发

时间:2015-11-27 10:55:41

标签: mysql triggers

我有使用MySQL的触发器的另一个问题。 这两个表,即债务和配置文件现在通过触发器连接,该触发器在stackoverflow中从我的其他问题解决。

CREATE TRIGGER `bal_load_debt` BEFORE INSERT ON  `debt` 
FOR EACH ROW BEGIN
  UPDATE `profile`
  SET `bal` = `bal` + NEW.`amount`
  WHERE `profile`.`id` = NEW.`profile_id`;
END

债务

+--+----------+------+
|ID|PROFILE_ID|AMOUNT|
+--+----------+------+
|1 |1         |500   |
+--+----------+------+

PROFILE

+--+-------+-----+------+
|ID|BALANCE|LIMIT|STATUS|
+--+-------+-----+------+
|1 |500    |650  |OPEN  |
|2 |300    |500  |OPEN  |
+--+-------+-----+------+

我的新问题是,如果新余额大于或等于限额,则状态应更改为关闭。我尝试通过添加

来修改触发器 bal_load_debt
  IF `balance` >= `limit`
      THEN UPDATE `profile`
  SET `status` = 'CLOSE';
  END IF;

但导致错误#1054未知列'余额'在'字段列表'

我还尝试在配置文件表上创建另一个更新后触发器,但我认为使用的语法不是那么有效:(

目标是如果我在债务上添加另一行,如:

+--+----------+------+
|ID|PROFILE_ID|AMOUNT|
+--+----------+------+
|1 |1         |500   |
|2 |1         |150   |
+--+----------+------+

配置文件表应如下所示:

+--+-------+-----+------+
|ID|BALANCE|LIMIT|STATUS|
+--+-------+-----+------+
|1 |650    |650  |CLOSE |
|2 |300    |500  |OPEN  |
+--+-------+-----+------+

我很高兴你的帮助:)

1 个答案:

答案 0 :(得分:1)

你应该更新BEFORE使用以下查询检查触发配置文件表

IF NEW.balance >= LIMIT THAN
    SET NEW.status = 'CLOSE';
END IF

这里我假设LIMIT是要支付的总债务