MYSQL 触发器更新未按预期工作

标签 mysql function triggers match

我在 MySQL Community Server 5.5.16 中创建了一个更新触发器,但是当我尝试更新语句时:Update Account set credit = 100 Where Number = 14001455; 我收到错误“ERROR 1172 ( 42000): 结果由多行组成”。我不明白为什么会出现此错误以及我的代码有什么问题:

delimiter |
CREATE TRIGGER t_creditexceed AFTER UPDATE ON Account
FOR EACH ROW
BEGIN 
    DECLARE n_overdraft INTEGER;
    DECLARE n_balance INTEGER;
    DECLARE n_number INTEGER;
    DECLARE n_credit INTEGER;
    DECLARE credit_exception condition for SQLSTATE '07030';

    SELECT balance, credit, number INTO n_balance, n_credit, n_number
    FROM Account;
    IF ((n_balance < (-n_credit)) AND (n_balance >= 1.1 * (-n_credit)))
    THEN
    SET n_overdraft = n_balance + n_credit;
    INSERT INTO overdraft (account_no, over_draft) VALUES (n_number, n_overdraft);
    END IF;
    IF (n_balance < 1.1 *(- n_credit))
    THEN signal credit_exception;
    END IF;
END;
|
delimiter ;

最佳答案

这个查询:

SELECT balance, credit, number INTO n_balance, n_credit, n_number
FROM Account;

没有 WHERE 子句,因此您将选择所有 Account 记录到变量中,这是错误消息的来源。只有当你有一个结果行时,选择变量才有效 - 对于多行,MySQL 无法知道你想要结果集中的哪一行。它不会为您挑选。

关于MYSQL 触发器更新未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9097287/

相关文章:

mysql - 存储过程在列名上抛出错误

在一条语句中两次调用具有静态字段的函数

r - 根据规则均衡R中3个向量的长度

MySQL 错误 1193 (HY00) : Uknown System variable 'loopCnt'

javascript - 如何组合不同的事件触发器

postgresql - 如何重新创建最初由 tsvector_update_trigger 填充的 tsvector 列

php - Mysqli 插入不工作。没有错误弹出

java - 具有相同名称的实体,始终为第一个 id 插入

php - 有效地对大mysql表进行排序

php - mysql_fetch_object() 的错误处理 : supplied argument is not a valid MySQL result