【发布时间】:2018-08-25 09:52:12
【问题描述】:
我有一个特定的 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 的“安全更新/删除”选项。这个问题没有得到解决。我想尝试得到一个实际的解决方案。
SQLUPDATE 语句:
-- 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 的首选项?
【问题讨论】:
-
有趣。也许问题在于更新中的联接扩大了可以删除的记录数量,即仅指定主键不再“安全”,因为理论上它仍然可以包含表的一大块。
-
@TimBiegeleisen 这又是一个有趣的理论。我正在考虑尝试重写它以不使用
JOIN,而是改为子查询WHERE charges.ChargeID IN ( SELECT charges_arc.ChargeID FROM charges_arc WHERE charges_arc.ChargeID = charges.ChargeID ),但如果你的理论是正确的,它也可能在那里犯规。既然我已经输入了这个,我现在就试一试...... -
哎呀,如果你使用子查询的思想,你不能在
SET子句中访问charges_arc.ChargeClearDate...
标签: mysql mysql-workbench