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

如果未达到COMMIT TRANSACTION,则会自动回滚

龚寂弦
2023-03-14
问题内容

考虑以下:

START TRANSACTION;

BEGIN;

INSERT INTO prp_property1 (module_name,environment_name,NAME,VALUE) VALUES ('','production','','300000');

/** Assume there is syntax error SQL here...**/
Blah blah blah

DELETE FROM prp_property1 WHERE environment_name = 'production';

COMMIT TRANSACTION;

题:

我注意到该事务自动回滚,并且记录插入尝试失败。

如果我没有ROLLBACK TRANSACTION像上面一样提供错误处理程序或错误检查,是否安全,因为它COMMIT TRANSACTION从未执行过,因此在上述示例中似乎可以完成工作?

我认为事务会立即回滚并在发生错误时立即丢弃。


问题答案:

不,一旦发生错误,事务不会回滚。但是您可能正在使用应用此策略的客户端应用程序。

例如,如果您使用的是mysql命令行客户端,则它通常会在发生错误时停止执行并退出。在事务进行过程中退出确实会导致其回滚。

在编写自己的应用程序时,可以控制回滚策略,但是有一些例外:

  • 退出(即从数据库断开连接)总是回滚正在进行的事务
  • 死锁或锁定等待超时隐式导致回滚

除这些条件外,如果调用生成错误的命令,则错误会照常返回,并且您可以随意执行任何操作,包括无论如何都要提交事务。



 类似资料:
  • 问题内容: 我有以下选择语句,以获取流的下一个预定项目。如果没有匹配的行,我希望它返回默认值。这是我正在使用的行: 那应该可以获取最近计划的项目,但如果它早于查询之前30分钟,则不会。但是,如果用户未安排任何时间,则我需要一个默认值,以便流中实际播放某些内容。我尝试了以下方法: 和: 但是,如果未找到任何行,它将始终返回空结果。我该如何返回默认值? 问题答案: 一种方法 由于只返回一行,因此可以使

  • 我正在使用MathJax在浏览器中呈现mathml标记。我使用TeX-AMS-MML_SVG配置在Chrome上运行良好,但在IE8中不起作用。 如果我切换到TeX-AMS-MML_HTMLorMML,它在所有浏览器中都能正常工作。不过,SVG渲染看起来要好得多,所以在可能的情况下,我希望这是首选。 MathJax是否内置了支持这一点的功能?它似乎可以从MML回退到HTML,但不能从SVG回退到H

  • 我在Laravel5.2中进行了多次身份验证,一切正常。我能够验证管理员身份,重定向到仪表板并成功注销。但问题是,当用户并没有经过身份验证,并且我将仪表板的路由放在url中时,即使管理员并没有经过身份验证,它也会打开仪表板。 我的管理模型 我的配置/auth.php 我的中间件管理uth.php 应用程序/内核。php 登录ontroller.php 路线 当我登录并打开仪表板时,我可以看到登录管

  • 我正在尝试跟踪全局关键事件,特别是按下的箭头键。为此,我将一个处理程序附加到当前活动的场景: 然而,虽然大多数键都像字母、ctrl和tab键总是被检测到,空格键和箭头键只在没有元素有焦点的情况下才起作用。也就是说,当我单击窗口中的任何位置时,某些元素获得焦点,而按空格或箭头不再触发事件。通过CSS样式,我发现一旦场景被点击,总是有一个焦点元素存在,在这种情况下上面的键停止工作。 我的猜测是,聚焦节

  • 我目前正在运行一个完整的节点,并试图循环处理一些事务。每当我使用Web3j并使用和我到达一个包含合约的事务(就像这个)并使用函数它返回一个空值。我有办法检索合约地址吗? 编辑:这是我用来获取交易的代码 这将返回一个“null”

  • 正如标题所说,如果它是自动完成的,它不会提交到数据库,但如果它没有自动完成,它会提交到数据库。我不想禁用自动完成,我不知道它为什么这样做。我的MAMP文件夹中的PHP和MySQL日志文件也没有错误。最后,它会重定向到确认页面,即使它在自动填充时没有提交到数据库。 我的代码: 失败的 HTTP 开机自检请求: 请求URL:http://localhost:5757/private-events/?c