检测mysql错误而不执行它

pil*_*ght 5 mysql sql database select

假设我做了一个查询" UPDATE table SET etc etc"

然后我"执行"这个查询

如果查询正常,则执行,如果查询有错误,则返回mysql错误

我的问题是......有没有办法做到以下几点:

如果查询有错误,它将返回mysql错误.但是,如果查询正常,请不要执行,而只是说查询没问题

换句话说,有没有办法检查mysql是否接受我的查询而没有在没有错误的情况下实际修改数据库中的条目?

svi*_*gen 5

如果您运行的是 MySQL 5.6 或更高版本,那么EXPLAIN就可以解决问题。

explain update whatever;
Run Code Online (Sandbox Code Playgroud)

如果查询没问题,就会显示执行计划。否则,它返回语法错误。


如果您运行的是较低版本的 MySQL,我会看到几个选项:

  1. 推荐的选项:准备一个测试数据库,至少在结构上反映您的生产数据库。理想情况下,用测试数据填充它以验证查询不仅在语法上正确,而且在语法上也正确。但它按预期工作
  2. 在立即回滚的TRANSACTION范围内运行查询。
  3. 运行稍作修改以匹配 NO ROWS 的查询版本。

例如:

update table set col1 = @val1 where col2 = @val2;
Run Code Online (Sandbox Code Playgroud)

变成:

update table set col1 = @val1 where (col2 = @val2) and 1=0;
Run Code Online (Sandbox Code Playgroud)

因此,如果您运行的是 5.6 或更高版本,那么这个EXPLAIN技巧就很巧妙。如果没有,列表中的选项 2 和 3 也是巧妙的技巧。但是,无论如何,您通常应该使用开发中的查询来访问开发服务器。