首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使在where子句中使用主键时,MySQL安全模式错误

即使在where子句中使用主键时,MySQL安全模式错误
EN

Stack Overflow用户
提问于 2019-12-10 16:39:17
回答 1查看 837关注 0票数 1

以前,当我尝试在mySQL表中设置/更新/删除某些内容时,它会给出

错误代码: 1175。您正在使用安全更新模式,并且尝试更新一个表,但没有使用键列禁用安全模式的位置,在Preferences -> SQL中切换该选项并重新连接。

我可以通过在where子句中包含一个包含主键的真实条件来解决这个问题。

然而,为什么以下这些不起作用呢?

代码语言:javascript
复制
UPDATE Lifts 
INNER JOIN liftstemp on Lifts.LiftID = liftstemp.LiftID
SET Lifts.AnnualNoLoadTestDate = liftstemp.AnnualNoLoadTestDate
where Lifts.LiftID<>"";

LiftID是一个varchar,是主键。

更新:正如Bill建议的那样,我暂时禁用了安全模式并得到了解释报告,但我不知道如何解释它。

最后更新:结果可能是版本问题。我在那台机器上运行了mariadb。在另一台具有mySQL本身的机器上,它工作时没有任何问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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时,您显示的解释不是我所得到的。我开始猜测您没有显示导致错误的查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59271847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档