导致INSERT失败的TRIGGER?可能??mysql-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

保持可爱mmm 2020-05-17 14:03:58 90

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

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

存储 关系型数据库 MySQL
分享到
取消 提交回答
全部回答(1)
  • 保持可爱mmm
    2020-05-17 14:08:35

    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

    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题