mysql - you - update safe




MySQL錯誤代碼:1175在MySQL Workbench中更新 (9)

  1. 優先...
  2. “安全更新”...
  3. 重新啟動服務器

我正在嘗試更新visited的列,以使其值為1.我使用MySQL工作台,並且在SQL編輯器中從工作台內部寫入語句。 我在寫下面的命令:

UPDATE tablename SET columnname=1;

它給了我以下錯誤:

您正在使用安全更新模式,並且您嘗試更新沒有使用KEY列的WHERE表格要禁用安全模式,請切換選項....

我按照說明操作,並從Edit菜單中選擇safe update選項,然後Preferences選項,然後Preferences SQL Editor 。 同樣的錯誤仍然出現,我無法更新此值。 請告訴我什麼是錯的?


不需要將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.

現在你可以放心,每一個記錄都會像你期望的那樣更新。


執行UPDATE命令之前請遵循以下步驟: 在MySQL Workbench中

  1. 轉到Edit - > Preferences
  2. 點擊"SQL Editor"選項卡, uncheck “安全更新” check box
  3. Query - > Reconnect to Server註銷,然後登錄
  4. 現在執行你的SQL查詢

ps,不需要重啟MySQL守護進程!


如果您處於安全模式,則需要在where子句中提供id。 所以像這樣的東西應該​​工作!

UPDATE tablename SET columnname=1 where id>0

我找到了答案。 問題是我必須在表名和模式名之前。 即命令應該是:

UPDATE schemaname.tablename SET columnname=1;

謝謝大家。


所有需要的是:開始一個新的查詢並運行:

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);

這工作。 好吧,如果我總是添加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;