MySQL错误代码:MySQL Workbench中UPDATE期间的1175错误代码

MySQL error code: 1175 during UPDATE in MySQL Workbench

我试图更新列visited,使其值为1。我使用MySQLWorkbench,从Workbench内部在SQL编辑器中编写语句。我正在编写以下命令:

1
UPDATE tablename SET columnname=1;

它给出了以下错误:

You are using safe update mode and you tried to update a table without
a WHERE that uses a KEY column To disable safe mode, toggle the option
....

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


您的MySQL会话似乎设置了安全更新选项。这意味着您不能在WHERE子句中不指定键(例如primary key)来更新或删除记录。

尝试:

1
SET SQL_SAFE_UPDATES = 0;

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


执行更新命令之前,请执行以下步骤:在MySQL工作台中

  • Edit->Preferences
  • 点击"SQL Editor"页签,uncheck安全更新check box页。
  • Query->Reconnect to Server//注销后登录
  • 现在执行SQL查询
  • 另外,不需要重新启动mysql守护进程!


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


    只需要:启动一个新查询并运行:

    1
    SET SQL_SAFE_UPDATES = 0;

    然后:运行您试图运行的查询,该查询以前不起作用。


    不需要将SQL安全更新设置为0,我真的不鼓励这样做。出于某种原因,安全更新默认为打开。如果你知道我的意思,你可以不带安全带和其他东西开车;)只需在WHERE子句中添加一个键值,该键值与所有项(如主键)相匹配,而不是写入:

    1
    2
    3
    4
    5
    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.

    现在您可以放心,每个记录都会(总是)如您所期望的那样更新。


    错误代码:1175。您使用的是安全更新模式,并且您试图更新一个不带WHERE的表,该表使用键列来禁用安全模式,切换preferences->sql editor中的选项并重新连接。

    暂时关闭"安全更新模式"

    1
    2
    3
    SET SQL_SAFE_UPDATES = 0;
    UPDATE options SET title= 'kiemvieclam24h' WHERE url = 'http://kiemvieclam24h.net';
    SET SQL_SAFE_UPDATES = 1;

    永远关闭"安全更新模式"

    mysql工作台8.0:

    1
    MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck"Safe Updates"

    enter image description here旧版本可以:

    1
    MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]


  • 偏好。。。
  • "安全更新"…
  • 重新启动服务器
  • Preferences...

    Safe UpdatesRestart server


    1
    SET SQL_SAFE_UPDATES=0;

    Edit --> Preferences

    单击SQL Queries选项卡,取消选中Safe Updates复选框。

    Query --> Reconnect to Server

    现在执行SQL查询


    如果您处于安全模式,则需要在WHERE子句中提供ID。所以像这样的东西应该管用!

    1
    UPDATE tablename SET columnname=1 where id>0


    我找到了答案。问题是我必须在表名前面加上模式名。也就是说,命令应该是:

    1
    UPDATE schemaname.tablename SET columnname=1;

    谢谢大家。


    在mysql workbech版本6.2中,不退出preferrencSQLQueries选项。

    在这种情况下,可以使用:SET SQL_SAFE_UPDATES=0;


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


    因为这个问题得到了回答,与安全更新无关,所以这可能是错误的地方;我将发布只是为了添加信息。

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

    1
    2
    3
    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);

    失败。将更新修改为:

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

    效果不错。很好——如果我总是添加where键<>0来绕过安全更新检查,或者甚至设置了sql-safe-update=0,那么我的查询就失去了"检查"。我也可以永远关掉这个选项。我想它会删除和更新一个两步的过程,而不是一个。但是,如果你打字足够快,不要再考虑钥匙的特殊性,而只是一个麻烦。


    对大多数例子来说,这是毫无意义的。但最后,我得出了以下声明,它工作得很好:

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

    这适用于Mac,但对于其他操作系统必须相同,除了首选项的位置。

    尝试不安全的DELETE操作时出错。

    Click on preferences when you get this error

    在新窗口中,取消选中选项Safe Updates

    Uncheck the safe updates

    然后关闭并重新打开连接。无需重新启动服务。

    现在我们将再次尝试DELETE,并取得成功。

    enter image description here

    那么,这些安全更新的全部内容是什么呢?这不是坏事。这就是MySQL所说的。

    使用--safe-updates选项

    For beginners, a useful startup option is --safe-updates (or
    --i-am-a-dummy, which has the same effect). It is helpful for cases when you might have issued a DELETE FROM tbl_name statement but
    forgotten the WHERE clause. Normally, such a statement deletes all
    rows from the table. With --safe-updates, you can delete rows only by
    specifying the key values that identify them. This helps prevent
    accidents.

    When you use the --safe-updates option, mysql issues the following
    statement when it connects to the MySQL server:

    1
    SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;

    在处理生产数据库时,可以安全地打开此选项。否则,必须非常小心,不要意外删除重要数据。


    在工作台上,我通过停用安全更新模式解决了这个问题:

    -编辑->首选项->SQL编辑器,然后取消选中安全更新。