6

我正在尝试使用以下查询更新表

update at_product A join
(
SELECT atbillfields.billeditemguid,count(*) AS numberOfPeopleBought
    ,sum(atbillfields.billeditemqty) AS soldquantity
FROM jtbillingtest.at_salesbill atsalesbill 
JOIN jtbillingtest.at_billfields atbillfields
    ON atsalesbill.billbatchguid=atbillfields.billbatchguid
WHERE atsalesbill.billcreationdate BETWEEN '2013-09-09' AND date_add('2013-09-09', INTERVAL 1 DAY)
GROUP BY atbillfields.billeditemguid) B ON B.billeditemguid = A.productguid
SET A.productQuantity = A.productQuantity - B.soldquantity

但是,得到以下异常:

错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表 要禁用安全模式,请切换 Preferences -> SQL Queries 中的选项并重新连接。

当我给出一个where带有更新的子句时A.productQuantity = 1,它更新了那个特定的。

有人可以指出为什么我无法执行查询以及如何解决问题?

4

5 回答 5

33

看一下:

http://justalittlebrain.wordpress.com/2010/09/15/you-are-using-safe-update-mode-and-you-tried-to-update-a-table-without-a-where-that-使用键列/

如果要在没有 where 键的情况下进行更新,则必须执行

SET SQL_SAFE_UPDATES=0;

就在您的查询之前。

另一种选择是重写您的查询或包含一个键。

于 2013-09-12T14:45:04.230 回答
6

此错误表示您正在安全更新模式下操作,因此您有两个选择:

  • 您需要提供一个 where 子句,其中包含更新成功的索引或
  • 您可以通过执行禁用此功能SET SQL_SAFE_UPDATES = 0;
于 2013-09-12T14:45:13.437 回答
4

您可以在 MysqlWorkbench 上尝试

转到编辑->首选项

单击“SQL 编辑器”选项卡并取消选中“安全更新”复选框

查询 --> 重新连接到服务器(注销然后登录)

我希望它对你有帮助。

于 2016-01-15T02:43:39.873 回答
3

MySQL 5.5,如果你使用MySQL Workbenchthen

  • 转到Edit-->Preferences
  • 单击"SQL Queries"选项卡并取消选中"Safe Updates"复选框。
  • Query -->重新连接到服务器(logout然后login

这行得通。

于 2016-04-19T21:01:16.973 回答
0

在我的例子中,我禁用了使用这个 Mysql 命令检查外键:

SET FOREIGN_KEY_CHECKS=0;
于 2021-02-02T18:10:55.047 回答