以前,当我尝试在mySQL表中设置/更新/删除某些内容时,它会给出
错误代码: 1175。您正在使用安全更新模式,并且尝试更新一个表,但没有使用键列禁用安全模式的位置,在Preferences -> SQL中切换该选项并重新连接。
我可以通过在where子句中包含一个包含主键的真实条件来解决这个问题。
然而,为什么以下这些不起作用呢?
UPDATE Lifts
INNER JOIN liftstemp on Lifts.LiftID = liftstemp.LiftID
SET Lifts.AnnualNoLoadTestDate = liftstemp.AnnualNoLoadTestDate
where Lifts.LiftID<>"";LiftID是一个varchar,是主键。
更新:正如Bill建议的那样,我暂时禁用了安全模式并得到了解释报告,但我不知道如何解释它。

最后更新:结果可能是版本问题。我在那台机器上运行了mariadb。在另一台具有mySQL本身的机器上,它工作时没有任何问题。
发布于 2019-12-10 16:44:11
https://dev.mysql.com/doc/refman/8.0/en/mysql-tips.html#safe-updates说:
如果优化器决定不对
列使用索引,则即使使用WHERE子句中指定的键,UPDATE和DELETE语句也有可能在安全更新模式下产生错误。
为查询获取一个解释报告,我预测您将看到它在一个或另一个表上执行type: ALL。
我创建了一个像您这样的表,并填充了2000行。我设置了sql_safe_updates=1,并尝试了您的更新。
没有错误或警告。
我在MySQL 5.7.27上进行了测试。
而且,当我在您显示的查询上运行EXPLAIN时,您显示的解释不是我所得到的。我开始猜测您没有显示导致错误的查询。
https://stackoverflow.com/questions/59271847
复制相似问题