【问题标题】:detect mysql errors without executing it检测mysql错误而不执行它
【发布时间】:2013-11-21 03:45:34
【问题描述】:

假设我查询“UPDATE table SET etc etc

然后我“执行”这个查询

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

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

如果查询有错误,它将返回mysql错误。然而, 如果查询没问题,不要执行,而是说查询没问题

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

【问题讨论】:

标签: mysql sql database select


【解决方案1】:

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

explain update whatever;

如果查询正常,则显示执行计划。否则返回语法错误。


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

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

例如:

update table set col1 = @val1 where col2 = @val2;

变成:

update table set col1 = @val1 where (col2 = @val2) and 1=0;

因此,如果您运行的是 5.6 或更高版本,EXPLAIN 技巧就很巧妙。如果没有,列表中的选项 2 和 3 也是巧妙的(ish)技巧。 但是,您通常应该使用 in-development 查询访问 development 服务器。

【讨论】:

  • 我可以验证。查询的解析与EXPLAIN无关,所以如果不是有效查询,EXPLAIN就无法运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2015-06-29
相关资源
最近更新 更多