中止MySQL脚本执行的方法(可能会引发错误)?

Sta*_*Man 21 mysql sql exception fast-fail

我需要为MySQL编写设置脚本(通常使用mysql控制台中的'source [file]'运行),这部分依赖于现有数据,并且环境存在差异,这意味着有时脚本会失败.一个常见的情况是带有select(用于定位id)的'SET'语句无法找到任何内容; console将value设置为NULL.在这种情况下,我希望脚本失败; 我听说这会通过引发错误(与其他DB)完成.然而,似乎MySQL没有办法做到这一点.

在这种情况下是否有强制失败的好方法?就像现在一样,当insert尝试使用null时,更新将失败,但即使这样也不会终止脚本本身.理想情况下,只要遇到问题,它就会失败并终止.

小智 15

我有同样的问题,GUI不适合我.这是我解决它的方式:

    DELIMITER $$

    DROP FUNCTION IF EXISTS sfKillConnection $$

    CREATE FUNCTION sfKillConnection() RETURNS INT
    BEGIN

        SELECT connection_id() into @connectionId;
        KILL @connectionId;
        RETURN @connectionId;
    END $$


    DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

它是一个函数而不是一个过程,所以它可以在这样的脚本中调用:

select if(@error, sfKillConnection(), 0);
Run Code Online (Sandbox Code Playgroud)

您可能需要使用该--disable-reconnect选项启动mysql客户端.


zom*_*bat 8

我认为你遇到的是MySQL控制台的限制.给定一个语句列表,MySQL控制台执行每个语句,而不管生成的任何错误.即使您实现了之前评论中提到的一些错误提示建议,当遇到此类错误时,MySQL控制台也不会停止执行.

我假设您没有资源将脚本语言应用于可以为您执行SQL并处理错误的问题.我想在这种情况下,你只需要一个比MySQL控制台更强大的工具.

如果我正确理解您的问题,MySQL Administrator可以满足您的需求.如果设置MySQL连接并连接到数据库,则"工具"菜单中提供了两个工具.普通的MySQL控制台就在那里,但你也有MySQL查询浏览器.

如果您打开查询浏览器,您将获得一个体面的MySQL数据库GUI视图.文件 - >打开脚本打开您的SQL脚本,然后使用执行按钮.

你得到一个很好的进度条,更重要的是从它的声音,如果查询失败,脚本执行停止并突出显示失败的查询.您可以选择跳过它并继续,甚至手动修改数据,然后从脚本的其他位置启动.

一旦我发现并尝试使用Administrator,我几乎立即放弃了MySQL控制台.


KCD*_*KCD 8

MySQL Workbench现在取代了MySQL Administrator.

使用'切换是否应在失败的语句后继续执行SQL脚本'

切换在失败的语句之后是否应继续执行SQL脚本