MySQL错误代码:UPDATE期间的1175(MySQL-Workbench与控制台)

时间:2017-01-17 00:28:05

标签: mysql sql-update mysql-workbench

我非常清楚启用禁用安全更新模式可以解决此问题(例如,请参阅此处: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

3 个答案:

答案 0 :(得分:1)

来自https://dev.mysql.com/doc/workbench/en/workbench-faq.html#faq-workbench-delete-safe

  

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

此类配置会阻止您错误地删除或更新表,因为您正在对没有密钥的数据进行批量更新。

要解决此问题,您可能已经了解以下选项。

  1. 打开Workbench首选项,选择SQL编辑器部分,并禁用以下首选项: “安全更新” - 禁止在WHERE子句中没有键或没有LIMIT子句的UPDATE和DELETE。
  2. 运行SET SQL_SAFE_UPDATES=0;

答案 1 :(得分:1)

如果使用的是工作台,则可以先执行

SET SQL_SAFE_UPDATES = 0;

然后执行删除语句

答案 2 :(得分:0)

如果您仍要使用安全更新来更新数据,则必须重新构建where子句,以便它包括对表的主键的引用。参见this page