【问题标题】:How to commit transaction before raise in mysql trigger?如何在mysql触发器中引发之前提交事务?
【发布时间】:2021-08-16 13:57:34
【问题描述】:
CREATE TRIGGER maindb.before_acc_update
BEFORE UPDATE
ON maindb.acc FOR EACH ROW
BEGIN
DECLARE errorMessage VARCHAR(255);
DECLARE clientName VARCHAR(100);
SET clientName = (select USER());
SET errorMessage = CONCAT('DB Error=> new acc_name value (',
                          NEW.acc_name,
                          ') cannot be null or empty. Old Value is:',
                          OLD.acc_name);
IF new.acc_name is null or TRIM(COALESCE(new.acc_name , '')) = ''  THEN
    BEGIN
        INSERT INTO maindb.acc_log_error (old_tz, new_tz, username) values (old.acc_name , new.acc_name, clientName);
    END ;
    SIGNAL SQLSTATE '23000' SET MESSAGE_TEXT = errorMessage;
END IF;
END;

Mysql 取消了我的交易。我想登录到 maindb.acc_log_error 并提出我的自定义错误。

【问题讨论】:

    标签: mysql logging triggers transactions


    【解决方案1】:

    抱歉,如果您在触发器中发出信号,它会中止该触发器的操作,包括该触发器所做的所有更改,例如你的INSERT 到日志表中。

    在触发器中止后保留对日志表的插入的唯一方法是在生成触发器的 UPDATEacc 之前或之后将 INSERT 作为单独的语句执行。

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-04
      • 2023-04-02
      • 1970-01-01
      • 2019-06-08
      • 2014-09-09
      相关资源
      最近更新 更多