如何在 mysql 触发器中 raise 之前提交事务?

How to commit transaction before raise in mysql trigger?

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 并引发我的自定义错误。

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

在触发器中止后,您可以将插入保留到日志 table 的唯一方法是将 INSERT 作为单独的语句在 UPDATEacc 产生了触发器。