workbench教程 - mysql workbench是什么




MySQL错误代码:1175在MySQL Workbench中更新 (9)

我正在尝试更新visited的列以使其值为1.我使用MySQL工作台,并且正在SQL工作台内部的SQL编辑器中编写语句。 我在写下面的命令:

UPDATE tablename SET columnname=1;

它给了我以下错误:

您正在使用安全更新模式,并且您尝试更新没有使用KEY列的WHERE表格要禁用安全模式,请切换选项....

我按照说明操作,然后从Edit菜单中选择safe update选项,然后Preferences选项,然后Preferences SQL Editor 。 同样的错误仍然出现,我无法更新此值。 请告诉我什么是错的?


  1. 优先...
  2. “安全更新”...
  3. 重新启动服务器


不需要将SQL_SAFE_UPDATES设置为0 ,我真的会阻止它这样做。 只需在WHERE子句中添加一个与主键相比所有内容都匹配的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.

现在你可以放心,每一个记录都会像你期望的那样更新。


如果您处于安全模式,则需要在where子句中提供id。 所以像这样的东西应该工作!

UPDATE tablename SET columnname=1 where id>0

它看起来像你的MySql会话设置了安全更新选项 。 这意味着如果不在where子句中指定键(例如primary key ),则无法更新或删除记录。

尝试:

SET SQL_SAFE_UPDATES = 0;

或者您可以修改您的查询以遵循规则(在where clause使用primary key )。


所有需要的是:开始一个新的查询并运行:

SET SQL_SAFE_UPDATES = 0;

然后:运行您之前尝试运行的查询以前不工作的查询。


执行UPDATE命令之前请遵循以下步骤: 在MySQL Workbench中

  1. 转到Edit - > Preferences
  2. 点击"SQL Editor"选项卡, uncheck “安全更新” check box
  3. Query - > Reconnect to Server注销,然后登录
  4. 现在执行你的SQL查询

ps,不需要重启MySQL守护进程!


由于这个问题已被回答,并且与安全更新无关,这可能是错误的地方; 我会发布只是为了添加信息。

我试图成为一个好公民,并且修改了查询以使用将更新的临时表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 field 1 = '' where id <> 0 and id in (select id from ids);

这工作。 好吧,如果我总是添加key <> 0以避开安全更新检查,或者甚至设置SQL_SAFE_UPDATE = 0,那么我在查询中失去了“检查”。 我不如永久关闭该选项。 我想它会删除和更新两个步骤的过程,而不是一个..但如果你输入的速度够快,并停止考虑关键是特殊的,而只是一个滋扰..


诚然,对大多数例子来说这是没有意义的。 但最后,我来到以下声明,它工作正常:

update tablename  set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');

SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;