我正在尝试阻止对表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没有足够不允许
答案 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
$$