我正在尝试更新列visited
以赋予它值1.我使用MySQL工作台,我在工作台内部编写SQL编辑器中的语句。我正在编写以下命令:
UPDATE tablename SET columnname=1;
它给了我以下错误:
您正在使用安全更新模式,并且您尝试更新表格 使用KEY列的WHERE要禁用安全模式,请切换选项 ....
我按照说明操作,然后取消选中safe update
菜单中的Edit
选项,然后Preferences
然后SQL Editor
。同样的错误仍然出现&我无法更新此值。请告诉我出了什么问题?
答案 0 :(得分:1340)
看起来你的MySql会话设置了safe-updates option。这意味着如果不在where子句中指定密钥(例如primary key
),则无法更新或删除记录。
尝试:
SET SQL_SAFE_UPDATES = 0;
或者您可以修改查询以遵循规则(使用primary key
中的where clause
)。
答案 1 :(得分:400)
在执行UPDATE命令之前,请执行以下步骤: 在MySQL Workbench中
Edit
- > Preferences
"SQL Editor"
标签和uncheck
“安全更新”check box
Query
- > Reconnect to Server
//注销然后登录p.s。,无需重启MySQL守护进程!
答案 2 :(得分:132)
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
答案 3 :(得分:98)
所需要的只是:开始一个新的查询并运行:
SET SQL_SAFE_UPDATES = 0;
然后:运行您之前无法运行的查询。
答案 4 :(得分:69)
无需将SQL_SAFE_UPDATES设置为0 ,我真的不鼓励它这样做。默认情况下,SAFE_UPDATES用于REASON。如果你知道我的意思,你可以开车没有安全带和其他东西;) 只需在WHERE子句中添加一个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.
现在您可以放心,每个记录都会(按照时间)更新。
答案 5 :(得分:42)
错误代码: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]
答案 6 :(得分:40)
答案 7 :(得分:33)
SET SQL_SAFE_UPDATES=0;
OR
转到 Edit --> Preferences
点击 SQL Queries
标签,然后取消选中 Safe Updates
复选框
Query --> Reconnect to Server
现在执行你的SQL查询
答案 8 :(得分:27)
SET SQL_SAFE_UPDATES = 0;
此处的代码SQL
SET SQL_SAFE_UPDATES = 1;
答案 9 :(得分:19)
我找到了答案。问题是我必须在表名前加上模式名称。即,命令应该是:
UPDATE schemaname.tablename SET columnname=1;
谢谢大家。
答案 10 :(得分:14)
在MySQL Workbench 6.2版中,不要退出首选项SQLQueries
选项。
SET SQL_SAFE_UPDATES=0;
答案 11 :(得分:8)
最简单的解决方案是定义行限制并执行。这样做是为了安全起见。
答案 12 :(得分:5)
由于问题得到解答并且与安全更新无关,这可能是错误的地方;我发帖只是为了添加信息。
我试图成为一个好公民并修改查询以使用可以更新的临时表:
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);
那很有用。好吧 - 如果我总是添加键&lt;&gt; 0来绕过安全更新检查,甚至设置SQL_SAFE_UPDATE = 0,然后我在查询中丢失了'检查'。我不妨永久关掉这个选项。我想它会删除和更新一个两步过程而不是一个...但是如果你输入的速度足够快并且不再考虑关键是特殊的而是仅仅是一种麻烦......
答案 13 :(得分:4)
没错,大多数例子都没有意义。但最后,我发表了以下声明,它运作良好:
update tablename set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');
答案 14 :(得分:3)
我也遇到了同样的问题,但是当我在“编辑”->中关闭“安全更新”时 首选项-> SQL编辑器->安全更新,我仍然要面对 错误为“错误代码1175禁用安全模式”
对于此错误,我的解决方案是仅赋予表主键(如果未提供),并使用这些主键值更新列。
例如:更新 [表名称] SET Empty_Column ='Value' WHERE [主键列名称] =值;
答案 15 :(得分:2)
这是用于Mac的,但对于其他操作系统,必须与首选项的位置相同。
尝试不安全的DELETE
操作时遇到的错误
在新窗口中,取消选中选项Safe updates
然后关闭并重新打开连接。无需重新启动服务。
现在,我们将再次尝试DELETE
并获得成功的结果。
那么,此安全更新的全部内容是什么?这不是邪恶的事情。这就是MySql所说的。
使用--safe-updates
选项
对于初学者来说,一个有用的启动选项是
--safe-updates
(或--i-am-a-dummy
,其效果相同)。在您可能发出DELETE FROM tbl_name
语句但 忘记了WHERE
子句。通常,这样的语句会删除所有 表中的行。使用--safe-updates
,您只能删除行 指定标识它们的键值。这有助于防止 事故。当您使用
--safe-updates
选项时,mysql发出以下命令 连接到MySQL服务器时的语句:
SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;
在处理生产数据库时可以安全地打开此选项。否则,您必须非常小心,不要意外删除重要数据。
答案 16 :(得分:1)
只需键入SET SQL_SAFE_UPDATES = 0;删除或更新之前并再次设置为1 SET SQL_SAFE_UPDATES = 1
答案 17 :(得分:0)
在WorkBench上,我通过取消安全更新模式来解决它:
-编辑->首选项-> Sql编辑器,然后取消选中安全更新。
答案 18 :(得分:0)
如果在存储过程中遇到此问题,并且无法使用WHERE子句中的键,则可以通过声明一个变量来解决此问题,该变量将保留应更新的行数限制,并且然后在更新/删除查询中使用它。
DELIMITER $
CREATE PROCEDURE myProcedure()
BEGIN
DECLARE the_limit INT;
SELECT COUNT(*) INTO the_limit
FROM my_table
WHERE my_column IS NULL;
UPDATE my_table
SET my_column = true
WHERE my_column IS NULL
LIMIT the_limit;
END$