我非常清楚启用禁用安全更新模式可以解决此问题(例如,请参阅此处:MySQL error code: 1175 during UPDATE in MySQL Workbench)。但是,我不希望禁用安全更新模式(并且有许多解决方案提出此建议)。
同样,我知道将WHERE子句设置为匹配所有内容的KEY值应该可以工作。但是,似乎没有在mysql-workbench上工作 - 至少不是我希望的方式(或它在控制台上的工作方式)。
例如,以下没有在mysql-workbench上工作(但在控制台上有效):
UPDATE FUEL_SOURCES AS FS
INNER JOIN
FUEL_CATEGORY FC ON FC.FUEL_CATEGORY = FS.FUEL_CATEGORY
SET
FS.FUEL_CATEGORY_ID = FC.ID
WHERE
FC.ID <> 0 AND FS.ID <> 0
...如果我明确/确切地设置ID(例如WHERE FC.ID = 20 AND FS.ID <> 10
),它将在mysql-workbench中工作。但这样做将涉及遍历每个密钥对组合。
了解导致此行为的原因,或者我是否正在做一些可怕的错误。使用mysql-workbench 6.3
答案 0 :(得分:1)
来自https://dev.mysql.com/doc/workbench/en/workbench-faq.html#faq-workbench-delete-safe
默认情况下,Workbench配置为不执行DELETE或UPDATE 在KEY列上不包含WHERE子句的查询。
此类配置会阻止您错误地删除或更新表,因为您正在对没有密钥的数据进行批量更新。
要解决此问题,您可能已经了解以下选项。
SET SQL_SAFE_UPDATES=0;
答案 1 :(得分:1)
如果使用的是工作台,则可以先执行
SET SQL_SAFE_UPDATES = 0;
然后执行删除语句
答案 2 :(得分:0)
如果您仍要使用安全更新来更新数据,则必须重新构建where子句,以便它包括对表的主键的引用。参见this page。