MySQL错误代码:1175在MySQL Workbench中更新
我试图更新visited
列给它的值1.我使用MySQL的工作台,我正在写在SQL编辑器从工作台内的语句。 我在写下面的命令:
UPDATE tablename SET columnname=1;
它给了我以下错误:
您正在使用安全更新模式,并且您尝试更新没有使用KEY列的WHERE表格要禁用安全模式,请切换选项….
我按照说明,我从Edit
菜单,然后Preferences
然后SQL Editor
取消选中safe update
选项。 仍然出现相同的错误,我无法更新此值。 请告诉我什么是错的?
它看起来像你的MySql会话有安全更新选项设置。 这意味着如果没有在where子句中指定键(例如primary key
),则不能更新或删除logging。
尝试:
SET SQL_SAFE_UPDATES = 0;
或者你可以修改你的查询来遵守规则(在where clause
使用primary key
)。
在执行UPDATE命令之前,请遵循以下步骤: 在MySQL Workbench中
- 转到
Edit
– >Preferences
- 点击
"SQL Editor"
选项卡,uncheck
“安全更新”check box
-
Query
– >Reconnect to Server
注销,然后login - 现在执行你的SQL查询
ps,不需要重启MySQL守护进程!
SET SQL_SAFE_UPDATES=0; UPDATE tablename SET columnname=1; SET SQL_SAFE_UPDATES=1;
所有需要的是:开始一个新的查询并运行:
SET SQL_SAFE_UPDATES = 0;
然后:运行您正在尝试运行的查询以前不工作。
SET SQL_SAFE_UPDATES=0;
要么
转到 Edit --> Preferences
单击 SQL Queries
选项卡并取消选中 Safe Updates
checkbox
Query --> Reconnect to Server
现在执行你的sql查询
- 优先…
- “安全更新”…
- 重新启动服务器
不需要将SQL_SAFE_UPDATES设置为0 ,我真的不打算这样做。 只需在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.
现在你可以放心,每一个logging都像你期望的那样更新。
如果您处于安全模式,则需要在where子句中提供id。 所以这样的事情应该工作!
UPDATE tablename SET columnname=1 where id>0
我find了答案。 问题是我必须在表名和模式名之前。 即命令应该是:
UPDATE schemaname.tablename SET columnname=1;
谢谢大家。
在MySQL Workbech 6.2版中,不会退出“首选项SQLQueries
选项。
在这种情况下,可以使用: SET SQL_SAFE_UPDATES=0;
既然这个问题已经回答了,并且与安全更新无关,这可能是错误的地方; 我会张贴只是为了添加信息。
我试图成为一个很好的公民,并修改查询使用临时表将更新的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);
这工作。 好吧,如果我总是添加钥匙<> 0以避开安全更新检查,甚至设置SQL_SAFE_UPDATE = 0,那么我已经失去了对我的查询“检查”。 我不如永远closures这个选项。 我想这使得删除和更新两个步骤的过程,而不是一个..但如果你打字速度不够,不要想着关键是特殊的,而只是一个滋扰..
诚然,对大多数例子来说,这是毫无意义的。 但最后,我来到以下声明,它工作正常:
update tablename set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');
最简单的解决scheme是定义行限制和执行。 这是为了安全目的而完成的。