开发者社区 问答 正文

导致INSERT失败的TRIGGER?可能??mysql

在清理这个答案时,我TRIGGER对MySQL和s和存储过程有了一些了解,但感到震惊的是,尽管BEFORE INSERTand BEFORE UPDATE触发器可以修改数据,但它们似乎不会导致插入/更新失败(即验证)。在这种特殊情况下,我可以通过处理数据以导致主键重复的方式来使其工作,这在这种特殊情况下是有道理的,但在一般意义上不一定有意义。

这种功能在MySQL中可行吗?在其他RDBMS中(可悲的是,我的经验仅限于MySQL)?也许是THROW EXCEPTION样式语法?

展开
收起
保持可爱mmm 2020-05-17 14:03:58 538 分享 版权
1 条回答
写回答
取消 提交回答
  • MySQL触发器:如何使用触发器中止INSERT,UPDATE或DELETE?在EfNet的#mysql上,有人问:

    如果我的业务规则失败,如何使触发器中止操作?

    在MySQL 5.0和5.1中,您需要采取一些技巧来使触发器失败并传递有意义的错误消息。MySQL存储过程常见问题说明了有关错误处理的内容:

    SP 11. SP是否具有“ raise”语句来“ raise application error”?抱歉,目前不行。SQL标准SIGNAL和RESIGNAL语句位于TODO上。

    也许MySQL 5.2将包含SIGNAL语句,这将使该黑客直接从MySQL存储过程编程中被盗。什么是hack?您将迫使MySQL尝试使用不存在的列。丑陋?是。它行得通吗?当然。

    CREATE TRIGGER mytabletriggerexample BEFORE INSERT FOR EACH ROW BEGIN IF(NEW.important_value) < (fancy * dancy * calculation) THEN DECLARE dummy INT;

    SELECT Your meaningful error message goes here INTO dummy 
        FROM mytable
      WHERE mytable.id=new.id
    

    END IF; END;来源:stack overflow

    2020-05-17 14:08:35
    赞同 展开评论