列visited
を更新して値1を与えようとしています。MySQLワークベンチを使用し、ワークベンチ内からSQLエディターでステートメントを書いています。私は次のコマンドを書いています:
UPDATE tablename SET columnname=1;
それは私に次のエラーを出します:
セーフ更新モードを使用していて、KEY列を使用するWHEREなしでテーブルを更新しようとしました。セーフモードを無効にするには、オプションを切り替えます。
指示に従い、Edit
メニューからsafe update
オプション、次にPreferences
そしてSQL Editor
のチェックを外しました。それでも同じエラーが表示されます。この値を更新することはできません。何が問題なのか教えてください。
私は答えを見つけました。問題は、テーブル名の前にスキーマ名を付けなければならないことです。つまり、コマンドは次のようになります。
UPDATE schemaname.tablename SET columnname=1;
皆さんありがとう。
MySqlセッションに safe-updatesオプション setがあるようです。つまり、where句でキー(例:primary key
)を指定せずにレコードを更新または削除することはできません。
試してください:
SET SQL_SAFE_UPDATES = 0;
または、ルールに従うようにクエリを変更することもできます(primary key
のwhere clause
を使用してください)。
UPDATEコマンドを実行する前に、次の手順に従ってください。 MySQL Workbenchの場合
Edit
- > Preferences
に行きます"SQL Editor"
タブをクリックしてuncheck
"安全な更新" check box
Query
- > Reconnect to Server
//ログアウトしてからログインするp.s.、MySQLデーモンを再起動する必要はありません。
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
必要なのは、次のとおりです。新しいクエリを開始して実行します。
SET SQL_SAFE_UPDATES = 0;
それから:あなたが実行しようとしていたクエリを実行してください。
SQL_SAFE_UPDATESを0に設定する必要はありません 、そうすることをお勧めします。 REASONの場合、SAFE_UPDATESはデフォルトでオンになっています。私の言っていることがわかっていれば、安全帯などを使わずに車を運転することができます。
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.
今、あなたはすべての記録があなたが期待する通りに(常に)更新されることを保証されることができます。
エラーコード:1175。セーフアップデートモードを使用しており、KEYカラムを使用するWHEREのないテーブルをアップデートしようとしました。セーフモードを無効にするには、Preferences - > SQL Editorのオプションを切り替えて再接続します。
"Safe Update Mode"を一時的にオフにします
SET SQL_SAFE_UPDATES = 0;
UPDATE options SET title= 'kiemvieclam24h' WHERE url = 'http://kiemvieclam24h.net';
SET SQL_SAFE_UPDATES = 1;
"Safe Update Mode"を永遠にオフにします
MySQLワークベンチ8.0:
MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck "Safe Updates"
MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]
SET SQL_SAFE_UPDATES=0;
OR
Edit --> Preferences
に移動します
SQL Queries
タブをクリックし、Safe Updates
チェックボックスをオフにします。
Query --> Reconnect to Server
今すぐあなたのSQLクエリを実行します
セーフモードの場合は、where句にidを指定する必要があります。だから、このようなものはうまくいくはずです!
UPDATE tablename SET columnname=1 where id>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);
それはうまくいった。嬉しいことに、安全な更新チェックを回避するためにwhere key <> 0を常に追加したり、SQL_SAFE_UPDATE = 0を設定したりすると、クエリの 'check'が失われます。私はちょうど永久にオプションをオフにするかもしれません。私はそれが1つではなく2つのステップからなるプロセスの削除と更新をすると思います。
確かに、これはほとんどの例では無意味です。しかし、最後に、私は次の文に来ました、そしてそれはうまくいきます:
update tablename set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');
これは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;
本番データベースを扱うときは、このオプションをオンにしても安全です。それ以外の場合は、誤って重要なデータを削除しないように注意する必要があります。
SET SQL_SAFE_UPDATES = 0;
ここにコードSQL
SET SQL_SAFE_UPDATES = 1;
WorkBenchでは、セーフアップデートモードを無効にすることで解決しました。
-Edit - > Preferences - > Sql EditorそれからSafe updateのチェックを外します。