更新查询失败,错误:1175

时间:2013-09-12 14:40:08

标签: 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 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的表要禁用安全性   模式,切换首选项中的选项 - > SQL查询并重新连接。

当我使用where这样的更新提供A.productQuantity = 1子句时,它更新了该特定内容。

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

5 个答案:

答案 0 :(得分:20)

看看:

http://justalittlebrain.wordpress.com/2010/09/15/you-are-using-safe-update-mode-and-you-tried-to-update-a-table-without-a-where-that-uses-a-key-column/

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

SET SQL_SAFE_UPDATES=0;
在你的查询之前

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

答案 1 :(得分:4)

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

  • 您需要提供一个where子句,其中包含要成功更新的索引或
  • 您可以通过SET SQL_SAFE_UPDATES = 0;
  • 停用此功能

答案 2 :(得分:2)

您可以尝试使用MysqlWorkbench

转到编辑 - >首

点击" SQL编辑器"选项卡并取消选中"安全更新"复选框

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

我希望它对你有所帮助。

答案 3 :(得分:1)

MySQL 5.5,如果您正在使用MySQL Workbench,那么

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

这很有效。

答案 4 :(得分:0)

就我而言,我禁用检查外键使用此 Mysql 命令:

SET FOREIGN_KEY_CHECKS=0;