MySQLエラーコード:MySQL Workbenchでの更新中の1175


817

列を更新visitedして値を1にしようとしています。MySQLワークベンチを使用し、SQLエディターでワークベンチ内からステートメントを作成しています。次のコマンドを書いています。

UPDATE tablename SET columnname=1;

次のエラーが表示されます。

セーフ更新モードを使用していて、KEY列を使用するWHEREなしでテーブルを更新しようとしました。セーフモードを無効にするには、オプションを切り替えます...

私は指示に従った、と私はチェックsafe updateからオプションをEdit、メニューPreferences、その後SQL Editor。同じエラーが引き続き表示され、この値を更新できません。何が悪いのか教えてください。


4
これにより、visited = 0となるテーブルのすべての行が、visited = 1になるように更新されます。これは、あなたの望むことですか?
マークバイヤーズ

23
「安全な更新」のチェックを外した後、以下のステップに従ってください:クエリ->サーバーに再接続します。今すぐクエリを実行します
Ripon Al Wasim

5
この変更を有効にするには、MySQLサーバーに再接続する(MySQL接続を再開する)必要があります。
フィリップオルソン

回答:


1613

MySqlセッションにsafe-updatesオプションが設定されているようです。つまりprimary key、where句でキー(例:)を指定せずにレコードを更新または削除することはできません。

試してください:

SET SQL_SAFE_UPDATES = 0;

それとも、(使用規則に従うことを、あなたのクエリを変更することができますprimary keywhere clause)。


コマンドを入力したidと同じ効果を持つGUIからセーフアップデートオプションをすでに無効にしたことを述べました。しかし、あなたの答えに感謝します、しかし私は私の質問にすでに答えました。何が問題だったかを知るために私の答えを確認してください。
ジュリーA

8
GUIでオプションを変更したら、設定を適切に設定するためにデータベースに再接続する必要があります。
Tim Koscielski、2014年

31
SET SQL_SAFE_UPDATES = 1これは価値のある安全機能であるため、完了したら必ずこの設定を元に戻してください。
StockB 2016年

4
StockBに同意しません... SQLを使いこなせるようになるまでそのままにしておきたいと思うかもしれませんが...何をしているのかがわかったら...そのことはまったく役に立ちません。とにかく、本番サーバーで開発するべきではないので、失敗しても、破壊する必要があるのは開発サーバーだけです。
Mathieu Turcotte

3
私は常にこのオプションを11年間falseにしていたため、この投稿を過去6か月に20回ほど検索したと言っただけでしたが、今は開発と生産でこれをtrueに設定した会社で作業しています。これをデフォルトで0に設定する理由はたくさんあります。たとえば、csvに直接エクスポートするスタンドアロン機能を開発し、エクスポート済みまたは類似のものとしてマークする場合などです。また、pkフィルターがないことは明らかなグローバル更新が原因で煩わしい場合もあります。私はそれを、本当に便利な機能というより、noob-protectionとして見ています。
JoelBonetR 2018

454

UPDATEコマンドを実行する前に、次の手順に従ってください: MySQL Workbenchの場合

  1. 移動Edit->Preferences
  2. "SQL Editor"タブをクリックし、uncheck「安全な更新」check box
  3. Query-> Reconnect to Server //ログアウトしてからログイン
  4. SQLクエリを実行します

PS、MySQLデーモンを再起動する必要はありません!


20
バージョン6.3の場合、ステップ2の"Sql Editor"代わりにステップ2を使用する必要が"Sql Queries"あります。下部にチェックボックスがあります"Safe Updates"
meconroy

1
これが1回限りのものである場合は、オンに戻すことをお勧めします。これにより、注意を怠ると、データを非常に簡単に変更できます
フランケン

2
ありがとうコンロイ。しばらくの間、そのボックスが見えませんでした。私は窓を大きくしなければならなかった。
arn-arn 2016

多分彼らはそれを移動しましたが、MySQL Workbench 6.0では、「SQLエディター」ではなく「SQLクエリ」の下にあります
MPelletier

1
ええ、ここでも同じで、少し下にスクロールして確認しました。
Elon Zito

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

4
残念ながら、他のクエリベースのソリューションは私にとってはうまくいきませんでした。しかし、これはやった!安全な更新をオンに戻すための行を追加していただきありがとうございます。
SherylHohman 2017年

1
これはおそらく安全でありながら、最も一般的なものなので、私は本当にこれが好きです。
Nae

117

SQL_SAFE_UPDATESを0に設定する必要はありません。そのようにすることはできません。REASONの場合、SAFE_UPDATESはデフォルトでオンです。意味がわかっていれば、安全帯などを使わずに車を運転できます。)WHERE句に、主キーのようなすべてに一致するKEY値を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.

これで、すべてのレコードが(常に)期待どおりに更新されることが保証されます。


3
これは天才です!
Amos Long

高く評価された回答:+1
Asif Raza

2
ハハ、それは良いトリックです。私はWHERE id > 0この線に沿ってトリックとして使用しました。
Csaba Toth

うまくいきません。同じメッセージが表示され続けます。私はそれを解決しました:-Edit-> Preferences-> Sql Editorでセーフアップデートモードを無効にしてから、Safe updateのチェックを外します。
Abdelhadi Lahlou

2
しかし、これにより実際に安全性が向上するのはなぜですか?
Matt Messersmith

107

必要なのは、新しいクエリを開始して実行するだけです。

SET SQL_SAFE_UPDATES = 0;

次に、以前は機能していなかった、実行しようとしたクエリを実行します。


7
SOへようこそ、必ずお読みくださいツアーページヘルプページをこの1以下の多くの答えがまったく同じことを言うと、ヶ月前に投稿されているので、このような回避の投稿の答え
WOUNDEDStevenJones

1
クエリを実行した後、このオプションを再度有効にすることもできます。
kta

この答えは何を追加しますか?2年以上後、Habibillahと同じものを投稿しました。カルマを刈り取ろうとしていますか?
Luc


66

エラーコード: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]

41
  1. 環境設定...
  2. 「安全なアップデート」...
  3. サーバーを再起動します

環境設定...

安全なアップデート サーバーを再起動します


これは受け入れられた答えであるはずです.itは残念です
ErrorrrDetector

1
サーバーを再起動する必要はありません。接続を閉じて再度開くだけで十分です。
マークL.

1
MACでは、設定はMySQLWorkbenchのトップメニューにあります。
両性イオン

36
SET SQL_SAFE_UPDATES=0;

または

に行く Edit --> Preferences

SQL Queriesタブをクリックし、チェックボックスをオフにし Safe Updatesます

Query --> Reconnect to Server

SQLクエリを実行します


26

セーフモードの場合は、where句でidを指定する必要があります。したがって、このようなものが機能するはずです!

UPDATE tablename SET columnname=1 where id>0

1
このページには、この事実を確認した:bennadel.com/blog/...
DivDiff

20

WorkBenchでは、セーフアップデートモードを無効にすることで解決しました。

-Edit-> Preferences-> Sql Editorのチェックを外し、Safe updateをオフにします。


7
これは機能しますが、MySQL Workbenchを再起動する必要がありました。
ラニルMarasinghe

17

答えを見つけました。問題は、テーブル名の前にスキーマ名を付ける必要があることでした。つまり、コマンドは次のようになります。

UPDATE schemaname.tablename SET columnname=1;

皆さんありがとう。


5
左側のパネルでスキーマを選択することにより、スキーマ名の記載を回避できます。左側のパネルでスキーマを選択すると、選択したスキーマ/データベースを使用していることを意味します
Ripon Al Wasim 2013年

10
これは、質問(およびタイトル)に記載されている問題を解決するための答えではありません。別のものを承認済みとしてマークする必要があります。
T30 2017年

私はのSchemaNameと試みたが、同じエラーを取得、更新qms-active-db「1660_207100000001000」= .gh_tableセットブックマーク
Code_Mode

3
これは答えではありません!
エゼキエルビクター

1
間違った答え、正しい答えはハビビラ(下)が答えます
ハリハラs

14

MySQL Workbechバージョン6.2では、設定SQLQueriesオプションを終了しません。

この場合、次のように使用できます。 SET SQL_SAFE_UPDATES=0;


1
存在しますが、オプションは「SQLエディター」の下にあります。
Philip Olson

このオプションは表示されません。スクリーンショットを取得してください。ありがとう
ferdiado 2014年

[設定]-> [SQLエディター]タブ->下部を開きます。6.2-betaリリースにはこのオプションがなかったため、おそらく6.2.3+にアップグレードする必要があります。
フィリップオルソン

私のバージョンは6.3、それは-> SQL
Editor-

12

最も簡単な解決策は、行の制限を定義して実行することです。これは安全のために行われます。


2
このソリューションで+1。column = 'xyz' limit 9999999999のTABLEから削除
FlyingZebra1

2
この答えは、最も安全でない方法であるため、受け入れられる答えになるはずです。
ジュリアン

7

質問に対する回答があり、安全な更新とは何の関係もないため、これは間違った場所かもしれません。情報を追加するために投稿します。

私は善良な市民になろうとし、更新される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 field1 = '' where id <> 0 and id in (select id from ids);

うまくいきました。安全な更新チェックを回避するために常にキー<> 0を追加する場合、またはSQL_SAFE_UPDATE = 0を設定する場合でも、クエリの「チェック」が失われました。このオプションを完全にオフにすることもできます。1ステップではなく2ステップのプロセスを削除および更新することになると思います。しかし、十分に速くタイプして、キーが特別であると考えるのではなく、単に迷惑であると考えるのをやめた場合。


4

確かに、これはほとんどの例にとって無意味です。しかし、最後に、私は次のステートメントに来て、それはうまくいきます:

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

3

これはMacの場合ですが、設定の場所を除いて他のOSでも同じである必要があります。

安全でない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;

本番データベースを扱う場合は、このオプションをオンにしても安全です。それ以外の場合は、重要なデータを誤って削除しないように十分注意する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.