具有逻辑错误条件的插入防止触发器

时间:2019-08-07 17:10:41

标签: mysql database-trigger

我正在尝试阻止对表Card1 and Card2上的用户进行更新refer,该用户的钱少于表 total_balance所需的钱。 total_money

是否可以用触发器来组合这样的逻辑?

    DELIMITER $$
        CREATE trigger LessMoneyThanRequirePrevent
        Before update ON refer
        FOR EACH ROW
      BEGIN
           IF (total_balance.total_money<10 WHERE total_balance.username= NEW.refer.username)
              THEN
            SIGNAL SQLSTATE '45000' 
                SET MESSAGE_TEXT = 'Not enough money in your account! Insertion canceled';
              END IF;
         END
        $$
        DELIMITER;

我认为WHERE条件存在问题?

表格:引用

 ID        username        Card1        Card2  
+-------+-------------+-------------+-----------+
|   1   |  John       |  Value      |    Value  |
+-------+-------------+-------------+-----------+
|   2   |  Alex       |  Null       |    Null   |
+-------+-------------+-------------+-----------+

表格:总余额

 ID        username     total_money        
+-------+-------------+-------------+
|   1   |  John       |     10.0    |
+-------+-------------+-------------+
|   2   |  Alex       |     7.0     |
+-------+-------------+-------------+

例如: John用户在total_balance上有足够的钱,并且允许更新 Card1 and Card2,但Alex没有足够不允许

1 个答案:

答案 0 :(得分:0)

需要更改IF条件。以下是触发器:

DELIMITER $$
CREATE trigger LessMoneyThanRequirePrevent
Before update ON refer
FOR EACH ROW
BEGIN
   IF EXISTS(SELECT 1 FROM total_balance b WHERE b.total_money<10 AND b.username= NEW.username)
   THEN
      SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Not enough money in your account! Insertion canceled';
   END IF;
END
$$