【问题标题】:Catch error in MYSQL在 MYSQL 中捕获错误
【发布时间】:2012-01-06 17:32:19
【问题描述】:

我想实现一个批处理 MySQL 脚本来在数据库中做某事。问题是,对于我拥有的每个主 ID,我想插入 4 个元组。但是这个元组应该添加到事务中,这意味着如果这 4 个元组之一失败,则事务应该回滚。然后我需要有一些捕获机制来捕获查询失败。我只能使用 PURE MYSQL,既不是 PHP,也不是 PERL 等。即使我无法创建任何存储过程来做到这一点。在 Microsoft SQL Server 中,@@error 变量解决了我的问题,但在 MYSQL 中,我们没有任何显示错误代码的系统变量。 我该怎么做?

干杯,

【问题讨论】:

  • 我想抓住它来回滚事务
  • 为什么不能将“批处理 MYSQL”脚本包装在 PHP 包装器中?然后你可以使用 try/catch 和回滚/提交。

标签: mysql transactions


【解决方案1】:

这是一个丑陋的解决方法,但是当我尝试导入一批 SQL 查询并将整个事物包装在一个事务中时,它对我有用,以便在任何 SQL 查询出错时我可以回滚。

由于批处理的大小很大,因此带有条件处理程序的 SQL 过程也不是一个选项。

您必须手动执行此操作,因此除非您进行批处理,否则这确实不是解决方案:

首先,确保您的整个批次都存储在 SQL 文件中。 SQL 文件应该只包含批处理查询,不包含事务控制查询。

然后启动 MySQL 命令行客户端并手动输入事务命令:

mysql> SET AUTOCOMMIT = 0;
mysql> START TRANSACTION;

然后告诉命令行客户端运行批处理文件:

mysql> SOURCE path/to/file.sql

之后,您可以简单地手动 COMMIT;ROLLBACK;,具体取决于您对查询结果的满意程度。

不过,这实在是太麻烦了。谁有更好的方法?

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 2015-10-09
    • 2013-03-14
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多