我有一个特定的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
确实是charges
和charges_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的首选项?
答案 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;