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

时间:2018-03-16 10:47:18

标签: mysql mysql-workbench

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

我完全了解MySQL error code: 1175 during UPDATE in MySQL Workbench。我的案例似乎与MySQL error code: 1175 during UPDATE (MySQL-Workbench vs. console)相同。就像那个提问者一样,我希望禁用MySQL-Workbench的“安全更新/删除”选项。那个问题未能得到解决方案。我想尝试一个实际的解决方案。

SQL UPDATE语句:

-- update new columns' values from corresponding rows in `charges_arc` UPDATE `charges` INNER JOIN `charges_arc` ON `charges`.`ChargeID` = `charges_arc`.`ChargeID` SET `charges`.`ChargeClearDate` = `charges_arc`.`ChargeClearDate` WHERE `charges`.`ChargeID` = `charges_arc`.`ChargeID`;

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

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

  

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

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

2 个答案:

答案 0 :(得分:0)

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

-- update new columns' values from corresponding rows in `charges_arc` UPDATE `charges` INNER JOIN `charges_arc` ON `charges`.`ChargeID` = `charges_arc`.`ChargeID` SET `charges`.`ChargeClearDate` = `charges_arc`.`ChargeClearDate` WHERE `charges`.`ChargeID` = `charges_arc`.`ChargeID` AND `charges`.`ChargeID` <> -9999

只是将AND charges.ChargeID <> -9999添加到条件中。它几乎没有缩小范围(!),而且非常难看(!)。我只能猜测Workbench希望看到针对PK&#34;的某种文字测试,以便你展示它以某种方式考虑过PK!它至少允许您执行查询而不禁用&#34;安全更新&#34;。

我会把这个开放几天,以确定是否有人能想到更整洁的东西。

就我个人而言,我在一个大型升级脚本文件中有很多这类UPDATE,这对我来说太难看了,我可能最终选择SET SQL_SAFE_UPDATES=0整个文件毕竟......

编辑:最后我决定将上面的额外AND条款添加到我喜欢UPDATE ... JOIN ...的{​​{1}}这些类型中是非常难看的{1}}在他们周围,至少为了清楚起见。

答案 1 :(得分:0)

在相同情况下,使用MySQL 5.6和MySQLWorkbench 8,我收到此错误。通过限定WHERE子句中的字段名称,我能够解决该错误。

例如,这导致了1175错误:

UPDATE `tReports`
SET
`Title` = Title,
`Descr` = Descr
WHERE `ID` = ID;

这解决了它:

UPDATE `tReports`
SET
`Title` = Title,
`Descr` = Descr
WHERE `tReports`.`ID` = ID;