首页 文章

如何避免MySQL Workbench错误代码:1175在此UPDATE期间*没有*禁用“安全更新”

提问于
浏览
2

我有一个特定的MySQL UPDATE 语句,它在 WHERE 子句中指定了所需的主键,但在MySQL Workbench中运行时仍会产生错误1175 .

我非常清楚MySQL error code: 1175 during UPDATE in MySQL Workbench . 我的案子似乎与MySQL error code: 1175 during UPDATE (MySQL-Workbench vs. console)相同 . 就像那个提问者一样,我不想禁用MySQL-Workbench的"safe update/delete"选项 . 那个问题未能得到解决方案 . 我想尝试获得一个实际的解决方案 .

SQL UPDATE 声明:

-- update new columns' values from corresponding rows incharges_arcUPDATEchargesINNER JOINcharges_arcONcharges.ChargeID=charges_arc.ChargeIDSETcharges.ChargeClearDate=charges_arc.ChargeClearDateWHEREcharges.ChargeID=charges_arc.ChargeID;

ChargeID 确实是 chargescharges_arc 表中的主键列 .

这意味着此语句确实满足MySQL Workbench的https://dev.mysql.com/doc/workbench/en/workbench-faq.html#faq-workbench-delete-safe

默认情况下,Workbench配置为不执行KEY列上不包含WHERE子句的DELETE或UPDATE查询 .

是否有重写此查询的解决方案,以便Workbench不会出现错误1175,并且不需要设置 SET SQL_SAFE_UPDATES=0 /更改Workbench的首选项?

1 回答

  • 0

    好吧,进一步发挥,到目前为止,我发现以下似乎让Workbench感到高兴:

    -- update new columns' values from corresponding rows incharges_arcUPDATEchargesINNER JOINcharges_arcONcharges.ChargeID=charges_arc.ChargeIDSETcharges.ChargeClearDate=charges_arc.ChargeClearDateWHEREcharges.ChargeID=charges_arc.ChargeIDANDcharges.ChargeID<> -9999

    那只是添加 AND charges.ChargeID <> -9999 的条件 . 它几乎没有缩小范围(!),而且非常难看(!) . 我只能猜测Workbench希望“看到某种针对PK ", so that you show it you have thought about the PK in a certain way! It does at least allow you to do the query without disabling "安全更新的字面测试” .

    我将这个开放几天,看看是否有人能想到更整洁的东西 .

    就我自己而言,我在一个大型升级脚本文件中有很多这样的 UPDATE ,这对我来说太难看了,毕竟我最终可能会在整个文件中找到 SET SQL_SAFE_UPDATES=0 ...

    EDIT :最后我决定将上面的额外 AND 条款添加到这些类型的 UPDATE ... JOIN ... s中是非常难看的,至少为了清楚起见,我更喜欢这些类型的 UPDATE ... JOIN ... .

相关问题