我有一个特定的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 in
charges_arcUPDATE
chargesINNER JOIN
charges_arcON
charges.
ChargeID=
charges_arc.
ChargeIDSET
charges.
ChargeClearDate=
charges_arc.
ChargeClearDateWHERE
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配置为不执行KEY列上不包含WHERE子句的DELETE或UPDATE查询 .
是否有重写此查询的解决方案,以便Workbench不会出现错误1175,并且不需要设置 SET SQL_SAFE_UPDATES=0
/更改Workbench的首选项?
1 回答
好吧,进一步发挥,到目前为止,我发现以下似乎让Workbench感到高兴:
-- update new columns' values from corresponding rows in
charges_arcUPDATE
chargesINNER JOIN
charges_arcON
charges.
ChargeID=
charges_arc.
ChargeIDSET
charges.
ChargeClearDate=
charges_arc.
ChargeClearDateWHERE
charges.
ChargeID=
charges_arc.
ChargeIDAND
charges.
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 ...
.