我试图更新访问的列,使其值为1。我使用MySQL工作台,我从工作台内部在SQL编辑器中编写语句。我正在写下面的命令:

UPDATE tablename SET columnname=1;

它给了我以下错误:

您正在使用安全更新模式,并且试图在没有 若要禁用安全模式,请切换该选项 ....

我按照说明,我从编辑菜单中取消了安全更新选项,然后是首选项,然后是SQL编辑器。同样的错误仍然出现&我无法更新此值。求你了,告诉我怎么了?


当前回答

最简单的解决方案是定义行限制并执行。这样做是为了安全。

其他回答

不需要将SQL_SAFE_UPDATES设置为0,我真的不鼓励这样做。SAFE_UPDATES默认开启是有原因的。你可以不用安全带和其他东西开车,如果你知道我的意思;) 只需在WHERE子句中添加一个KEY-value,该KEY-value匹配所有内容,例如与0相比的主键,因此不必写:

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.

现在你可以放心,每一个记录(总是)更新如你所期望的。

既然这个问题已经得到了回答,而且与安全更新没有任何关系,那么这里可能是错误的地方;我将发布补充信息。

我试图成为一个好公民,并修改了查询,使用临时表的id将得到更新:

create temporary table ids ( id int )
    select id from prime_table where condition = true;
update prime_table set field1 = '' where id in (select id from ids);

失败。更新如下:

update prime_table set field1 = '' where id <> 0 and id in (select id from ids);

这工作。好吧,天哪——如果我总是添加where key <> 0来绕过安全更新检查,甚至设置SQL_SAFE_UPDATE=0,那么我已经在我的查询中丢失了“检查”。我还不如永远关闭这个选项。我想它会让删除和更新变成两个步骤,而不是一个步骤。但如果你打得足够快,不再认为钥匙是特殊的,而只是一个讨厌的东西。

第一: 请确保您想要更新该表中的所有记录,因为如果没有where子句,更新该表中的所有记录是危险的。很少需要更新表中的所有记录。

大多数时候,你想要更新特定的记录,其中应该包括where cluase,如果你再次想要更新所有的记录,打开MySQL工作台>编辑>首选项>SQL编辑>向下滚动,并取消选中“安全更新(拒绝更新和删除没有限制)”。

这是为了安全更新。

如果您取消选中上面所说的,那么您可能会更新所有记录,而不是导致数据库备份恢复的一条记录。没有回滚。

首选项… “安全更新”…… 重新启动服务器

我也有同样的问题,但当我关闭“安全更新”在编辑-> 首选项-> SQL编辑器->安全更新,我仍然使用面对 错误码为“1175禁用安全模式”

我对这个错误的解决方案只是给出了表的主键,如果没有给出,并使用这些主键值更新列。

例如:UPDATE[表名]SET Empty_Column = 'Value' WHERE [主键列名]= value;