我正在尝试更新列visited
以为其提供值1。我使用MySQL工作台,并从工作台内部的SQL编辑器中编写语句。我正在编写以下命令:
UPDATE tablename SET columnname=1;
它给我以下错误:
您正在使用安全更新模式,并且尝试更新表时没有使用KEY列的WHERE要禁用安全模式,请切换选项....
我已按照说明进行操作,我未勾选safe update
菜单中的Edit
选项,然后未勾选Preferences
,然后未勾选SQL Editor
。仍然会出现相同的错误,并且我无法更新此值。请告诉我哪里出了问题?
看来您的MySql会话已设置为safe-updates option。这意味着如果不在where子句中指定键(例如primary key
),则无法更新或删除记录。
尝试:
SET SQL_SAFE_UPDATES = 0;
或者您可以修改查询以遵守规则(使用primary key
中的where clause
)。
我找到了答案。问题是我必须在表名之前加上模式名。即,命令应为:
在MySQL Workbech版本6.2中,不退出Preference SQLQueries
选项。
SET SQL_SAFE_UPDATES = 0;
在WorkBench上,我通过取消激活安全更新模式来解决它:
最简单的解决方案是定义行限制并执行。出于安全目的而进行。
由于回答了问题,并且与安全更新无关,所以这里可能是错误的地方;我将仅发布以添加信息。
正确,对于大多数示例来说,这毫无意义。但是最后,我来到了下面的语句,它很好用:
这是用于Mac,但对于其他操作系统,必须相同,除了首选项的位置。
在执行UPDATE命令之前,请遵循以下步骤:在MySQL工作台中
Edit
-> Preferences
"SQL Editor"
选项卡和uncheck
“安全更新” check box
Query
->Reconnect to Server
//注销,然后登录p.s。,无需重新启动MySQL守护程序!
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
所需要做的就是:开始一个新查询并运行:
SET SQL_SAFE_UPDATES = 0;
然后:运行您试图运行的查询,该查询以前无法正常运行。
无需将SQL_SAFE_UPDATES设置为0,我真的不鼓励它那样做。默认情况下,SAFE_UPDATES在REASON上处于启用状态。如果您知道我的意思,您可以开车不戴安全带和其他东西;)只需在WHERE子句中添加一个匹配所有内容(例如主键与0匹配)的KEY值,那么就不用编写:
UPDATE customers SET countryCode = 'USA'
WHERE country = 'USA'; -- which gives the error, you just write:
UPDATE customers SET countryCode = 'USA'
WHERE (country = 'USA' AND customerNumber <> 0); -- Because customerNumber is a primary key you got no error 1175 any more.
现在您可以放心,每条记录都会(ALWAYS)如期更新。
错误代码:1175。您正在使用安全更新模式,并且试图更新不具有使用KEY列的WHERE的表。要禁用安全模式,请在“首选项”->“ SQL编辑器”中切换选项,然后重新连接。
暂时关闭“安全更新模式”
SET SQL_SAFE_UPDATES = 0; UPDATE options SET title= 'kiemvieclam24h' WHERE url = 'http://kiemvieclam24h.net'; SET SQL_SAFE_UPDATES = 1;
永远关闭“安全更新模式”
Mysql工作台8.0:
MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck "Safe Updates"
MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]
SET SQL_SAFE_UPDATES=0;
如果处于安全模式,则需要在where子句中提供ID。所以这样的事情应该起作用!