MYSQL 在使用信号 sqlstate 时触发将数据插入另一个 table

MYSQL Trigger insert data into another table while using signal sqlstate

我在插入之前有一个触发器来做一些验证。如果不满足验证,我想阻止插入并将数据插入另一个 table。我曾尝试使用 signal sqlstate 来完成此操作,但是当发生这种情况时会发生回滚,不会将数据插入另一个 table.

delimiter $$
create trigger tr_example_before_ins before insert on example
for each row
begin
    if example.price < 10000 then
        insert into example_log(example_id, notes)values(new.example_id, "WORKED");
        signal sqlstate '45000';
    end if;
end$$
delimiter ;

有没有办法在不使用 signal sqlstate 的情况下停止插入,这样我仍然可以将数据插入另一个 table?

您要查找的内容有时称为“代替”触发器。也就是说,它插入 table example_log 但不会插入生成触发器 example.

的 table

MySQL 不支持“代替”触发器,例如 Microsoft SQL 服务器支持:https://www.sqlservertutorial.net/sql-server-triggers/sql-server-instead-of-trigger/

如果触发器中止,则触发器执行的所有操作以及生成触发器的操作也会中止。如果不提交全部,就无法提交其中的一些。

因此,您唯一的选择是从客户端 table 插入日志 运行 example