Mysql 更新查询失败,错误为:1175

Mysql 更新查询失败,错误为:1175,mysql,sql,Mysql,Sql,我正在尝试使用以下查询更新表 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 atbillfie

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

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。您正在使用安全更新模式,并尝试 更新不带WHERE的表,该表使用键列禁用safe 模式下,在“首选项->SQL查询”中切换选项,然后重新连接

当我给出一个更新类似于a.productQuantity=1的
where
子句时,它更新了那个特定的

有人能指出我无法执行查询的原因以及如何解决问题吗?

看看:

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

SET SQL_SAFE_UPDATES=0;
就在你询问之前


另一种选择是重写查询以包含一个键

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

  • 您需要提供一个where子句,其中包含一个索引,以便更新成功或成功
  • 您可以通过执行
    SET SQL\u SAFE\u UPDATES=0来禁用此功能

您可以在MysqlWorkbench上试用

转到编辑-->首选项

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

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


希望对您有所帮助。

MySQL 5.5
中,如果您使用的是
MySQL工作台
,那么

  • 转到
    编辑
    -->
    首选项
  • 单击
    “SQL查询”
    选项卡并取消选中
    “安全更新”
    复选框
  • 查询
    -->重新连接到服务器(
    注销
    ,然后
    登录

这是可行的。

在我的例子中,我使用以下Mysql命令禁用检查外键:

SET FOREIGN_KEY_CHECKS=0;