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

Posted

技术标签:

【中文标题】MySQL 错误代码:更新期间的 1175(MySQL-Workbench 与控制台)【英文标题】:MySQL error code: 1175 during UPDATE (MySQL-Workbench vs. console) 【发布时间】:2017-05-31 22:18:27 【问题描述】:

我非常清楚,可以通过禁用安全更新模式来解决此问题(例如,请参阅此处:mysql error code: 1175 during UPDATE in MySQL Workbench)。但是,我不希望禁用安全更新模式(并且有很多解决方案都建议这样做)。

同样,我知道将 WHERE 子句设置为匹配所有内容的 KEY-value 应该可以工作。但是,似乎无法在 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 &lt;&gt; 10),它将在 mysql-workbench 中工作。但这样做将涉及遍历每个密钥对组合。

有兴趣知道是什么导致了这种行为,或者我是否做错了什么。使用 mysql-workbench 6.3

【问题讨论】:

请分享两个环境中删除的解释结果和两个表上定义的索引。 快速澄清 - 删除什么?一张桌子?两张表?其中一列? 【参考方案1】:

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

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

这样的配置可以防止您错误地删除或更新表,因为您正在对没有键的数据进行批量更新。

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

    打开您的 Workbench Preferences,选择 SQL Editor 部分,然后禁用以下首选项:“安全更新” - 禁止 WHERE 子句中没有键或没有 LIMIT 子句的 UPDATE 和 DELETE。 运行SET SQL_SAFE_UPDATES=0;

【讨论】:

...Key 列上有 is where 子句,我不想​​SET SQL_SAFE_UPDATES = 0 介意共享涉及表的表架构?【参考方案2】:

如果您仍想在安全更新开启的情况下更新您的数据,您必须重新编写 where 子句,使其包含对表主键的引用。见this page。

【讨论】:

欢迎提供解决方案链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及为什么会出现,然后引用最相关的您链接到的页面的一部分,以防目标页面不可用。 Answers that are little more than a link may be deleted.【参考方案3】:

如果你使用的是workbech,可以先执行

SET SQL_SAFE_UPDATES = 0;

然后执行删除语句

【讨论】:

以上是关于MySQL 错误代码:更新期间的 1175(MySQL-Workbench 与控制台)的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 MySQL Workbench 错误代码:此更新期间出现 1175 *无需*禁用“安全更新”

如何在 UPDATE 期间解决错误代码 1175 mySQL?

MySQL 错误代码:在带有 WHERE 子句的 UPDATE 期间出现 1175

尝试在存储过程中更新时出现 MySQL 错误代码 1175

使用 MySQL Workbench 5.2 在表上执行更新命令时出错(错误代码:1175)

MySql 错误:1175(更新时没有带主键的位置),尽管我确实使用了 PK,并且在查询中没有进行连接