1049

列を更新して値1を指定しようとしてvisitedいます。MySQLワークベンチを使用しており、ワークベンチ内からSQLエディターでステートメントを記述しています。私は次のコマンドを書いています:

UPDATE tablename SET columnname=1;

次のエラーが発生します。

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

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

4

23 に答える 23

2023

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

試す:

SET SQL_SAFE_UPDATES = 0;

または、ルールに従うようにクエリを変更することもできます(primary keyで使用where clause)。

于 2012-07-12T08:59:50.887 に答える
539

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

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

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

于 2013-01-09T09:37:03.253 に答える
229
SET SQL_SAFE_UPDATES = 0;

# your code SQL here

SET SQL_SAFE_UPDATES = 1;
于 2019-08-27T22:48:53.700 に答える
201
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
于 2013-07-26T14:42:00.110 に答える
151

SQL_SAFE_UPDATESを0に設定する必要はありません。そのように設定することは、お勧めしません。SAFE_UPDATESは、REASONに対してデフォルトでオンになっています。私の言いたいことを知っていれば、安全ベルトなどを使わずに車を運転できます;)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.

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

于 2015-02-04T07:46:02.423 に答える
112

必要なのは次のとおりです。新しいクエリを開始して実行します。

SET SQL_SAFE_UPDATES = 0;

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

于 2014-11-17T13:20:17.620 に答える
87

エラーコード: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]
于 2018-07-31T09:35:18.870 に答える
46
  1. 環境設定...
  2. 「安全な更新」...
  3. サーバーを再起動します

環境設定...

安全な更新 サーバーを再起動します

于 2016-02-19T17:37:45.853 に答える
36
SET SQL_SAFE_UPDATES=0;

また

に移動 Edit --> Preferences

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

Query --> Reconnect to Server

次に、SQLクエリを実行します

于 2013-12-02T13:32:58.083 に答える
31

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

UPDATE tablename SET columnname=1 where id>0
于 2015-09-11T09:07:11.620 に答える
29

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

-[編集]->[設定]->[SQLエディタ]を選択し、[安全な更新]のチェックを外します。

于 2019-05-20T10:16:40.340 に答える
17

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

于 2015-10-30T08:55:34.783 に答える
16

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

UPDATE schemaname.tablename SET columnname=1;

皆さんありがとう。

于 2012-07-12T08:52:58.017 に答える
13

SQLQueriesMySQL Workbechバージョン6.2では、設定オプションを終了しないでください。

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

于 2014-09-10T18:46:24.603 に答える
9

質問は回答され、安全な更新とは何の関係もないので、これは間違った場所である可能性があります。情報を追加するためだけに投稿します。

私は善良な市民になろうとし、更新される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);

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

于 2015-04-20T15:04:35.553 に答える
6

私も同じ問題が発生しましたが、[編集]->[設定]->[SQLエディター]->[セーフアップデート]で[セーフアップデート]をオフにしても、「エラーコード1175がセーフモードを無効にする」というエラーに直面していました。

このエラーの私の解決策は、指定されていない場合はテーブルに主キーが与えられ、それらの主キー値を使用して列を更新するだけです。

例:UPDATE [テーブル名] SET Empty_Column='値' WHERE [主キー列名]=値;

于 2020-09-07T16:29:23.250 に答える
5

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

update tablename  set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');
于 2015-10-10T11:05:29.777 に答える
4

これは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;

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

于 2018-07-05T07:22:01.727 に答える
2

SET SQL_SAFE_UPDATES=0と入力するだけです。削除または更新する前に、もう一度1に設定しますSET SQL_SAFE_UPDATES = 1

于 2020-08-26T14:08:19.300 に答える
2

ストアドプロシージャでこの問題が発生し、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$
于 2020-10-09T02:59:05.583 に答える
1

以前の投稿で述べたように、データベースサーバーのデフォルト設定を変更すると、公開されたプロジェクトのデータに対する誤ったクエリが原因で、既存のデータが望ましくなく変更されることになります。したがって、以前の投稿で述べたようなコマンドを実装するには、サンプルデータに対してテスト環境で実行し、正しくテストしてから実行する必要があります。

私の提案はWHERE、更新がテーブル内のすべての行に対して機能する必要がある場合に、すべての条件のすべての行をループする条件ステートメントを作成することです。たとえば、テーブルにID値が含まれている場合、条件ID > 0を使用してすべての行を選択できます。

/**
 * For successful result, "id" column must be "Not Null (NN)" and defined in
 * INT data type. In addition, the "id" column in the table must have PK, UQ
 * and AI attributes.
 */
UPDATE schema_name.table_name
SET first_column_name = first_value, second_column_name = second_value, ...
WHERE id > 0;

テーブルにid列が含まれていない場合、nullにできない列をチェックすることにより、すべての行で更新操作を実行できます。

/**
 * "first_column_name" column must be "Not Null (NN)" for successful result.
 */
UPDATE schema_name.table_name
SET first_column_name = first_value, second_column_name = second_value, ...
WHERE table_name.first_column_name IS NOT NULL;
于 2021-11-06T03:31:22.200 に答える
0

MySqlワークベンチで同じエラーが発生しました。セーフモードのチェックを外した後、サーバーに再接続すると、更新機能が機能しました。メニューバーの[クエリ]に移動し、サーバーに再接続します

クエリメニュー->サーバーに再接続

于 2022-01-08T11:58:05.520 に答える
0

最初に:where句がないと、そのテーブルのすべてのレコードを更新するのは危険なので、そのテーブルのすべてのレコードを更新することを確認してください。テーブル内のすべてのレコードを更新することはめったにありません。

ほとんどの場合、特定のレコードを更新する必要があります。ここで、すべてのレコードを再度更新する場合は、MySQLワークベンチ>編集>設定> SQLエディターを開き、右下にスクロールして、[安全な更新(更新と削除を拒否します)]のチェックを外します。制限なし)」。

安全な更新のためです。

上記のチェックを外すと、データベースのバックアップの復元につながる1つのレコードではなく、すべてのレコードを更新する可能性があります。ロールバックはありません。

于 2022-02-15T08:57:55.327 に答える