当前位置: 首页 > 面试题库 >

导致INSERT失败的TRIGGER?可能?

澹台建华
2023-03-14
问题内容

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

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


问题答案:

从这篇博客文章

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;


 类似资料:
  • 我正在Clojure中开发一个简单的hello world web应用程序。但是,在我将模式库添加到我的项目之后,当我试图使用构建一个uberjar时,我开始出现以下错误。奇怪的是,在使用启动时,应用程序仍然通过单元测试,并且运行时没有错误。 下面是我使用schema的源文件。为了简洁起见,我省略了其余的源文件,但如果有人想查看其余的文件,请直接询问。 我已经尝试过禁用AOT编译,因为这似乎是正常

  • 问题内容: 我添加了一个构建步骤来执行Python脚本。 在此脚本中,使用lint.Run(.. args)调用pylint来检查代码。 该脚本可以工作,但是最后,构建失败,并显示唯一的错误消息: 有人知道为什么会这样吗? 问题答案: 看来您的pylint执行退出状态为非零(缺少脚本,错误的选项…),也许您在退出脚本时引发了异常或

  • 考虑具有用户偏好系统的应用程序的以下用例: 我们想得到首选项MyFlag的布尔值 在最佳情况下,我们希望从当前用户的设置中获得它 如果失败,我们希望从默认设置中获取MyFlag<如果失败,抛出。 设置在服务器上。此连接很慢,可能会失败。 获取设置和获取首选项也可能失败。 所以让我们使用javas选项: 这里的问题是连接可能非常慢。当<代码>。orElse(slowlyGet…) slowlyGet

  • 我已经为Jenkins项目的集成公司建立了一个PoC,当Git存储库中有一个检查时,该PoC将构建并执行测试。当测试完成后,Jenkins将更新在Xray for JIRA中管理的测试。 测试是用cucumber写的。我曾徒劳地试图导致一个单一的测试产生一个失败,只是为了能够将它添加到我将要给高层管理人员的演示中。 以下是我的文件helloworld.feature的内容: 我知道不知道小cucu

  • 问题内容: 我有两个Slackware Linux系统,在这些系统上POSIX信号调用失败,并且errno设置为38。下面将重现示例代码(该代码在CentOS / RedHat上运行良好)。 是否有任何可能导致此问题的内核或系统配置选项?还有其他建议吗? 出现问题的系统是Slackware 10.1.0内核2.6.11 /lib/librt-2.3.4.so /lib/libpthread-0.1

  • 我正在按照http://spring.io/guides/gs/consource-web-service/#scratch中提供的分步说明学习如何使用Gradle和Spring-WS使用SOAP web服务。我已经创建了上面URL中指定的文件夹结构(即:c:/src/main/java/hello)并将build.gradle、weatherclient.java、weatherconfigur