【发布时间】:2021-11-23 12:56:37
【问题描述】:
我正在准备更新一列,但在更新过程中总是出现同样的错误,如果我不想禁用“安全更新模式”,我该如何解决? 这是我的查询
UPDATE test
SET unit_price= (SELECT unit_price*1.15
FROM (SELECT unit_price from test )as l
)where qtyinstock>0
错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表 要禁用安全模式,请切换 Preferences -> SQL Editor 中的选项并重新连接。 0.000 秒
【问题讨论】:
-
请包含您收到的完整、准确的错误消息,而不仅仅是错误号。我们不必搜索错误代码来找出它的含义,错误消息的内容通常提供对解决问题有用的信息。完整的错误消息就在您面前的屏幕上,因此您绝对没有理由不在您的问题中提供它。您要求我们提供免费帮助来解决您的问题,通过向我们提供您已有的信息,让我们尽可能轻松地解决您的问题符合您的最大利益。
-
此外,如果您花一些时间访问tour 并阅读help center 页面以了解该网站的运作方式,您的体验会更好。
-
错误信息告诉你如何修复它。使用使用 KEY 列的 WHERE。如果您为表和一些示例数据添加 CREATE TABLE DDL,将会有很大帮助。
-
我想也许你使用内连接更新。
update test t1 inner join ( select unit_price*1.15 as unit_price from test where qtyinstock>0 ) as t2 on t1.unit_price =t2.unit_price set t1.unit_price =t2.unit_price ;查询未测试 -
这是一项防止初学者犯错误的功能(例如,意外更新所有行而不是特定行 - 由主键标识),参见例如here。您可能正在使用的 MySQL Workbench 默认启用此模式。错误消息告诉您如何在 Workbench 设置中禁用“安全模式”:“要禁用安全模式,请切换 Preferences -> SQL Editor 中的选项并重新连接。”(如果您使用的是不同的编辑器,要么告诉我们,要么在那里寻找类似的选项)。
标签: mysql