序文 アプリケーションのバグや DBA の誤操作が発生した場合、テーブル全体が更新される可能性があります (update delete)。 MySQL では、この操作を制限するために sql_safe_updates が提供されています。 sql_safe_updates を 1 に設定します。 設定後、更新および削除における where 条件のない SQL 実行が制限され、より厳格になります。既存のオンライン環境に悪影響を及ぼします。新しいシステムとアプリケーションを厳密に監査することで、テーブル全体の更新が行われないようにすることができます。 テーブルworking.test01を作成します(id INT NOT NULL AUTO_INCREMENT、NAME VARCHAR(20)、age INT、gmt_created DATETIME、PRIMARY KEY(id)); test01(name,age,gmt_created) に値('xiaowang',2,now()) を挿入します。 test01(name,age,gmt_created) に値 ('huahua',5,now()) を挿入します。 test01(name,age,gmt_created) に値('gougou',9,now()) を挿入します。 test01(name,age,gmt_created) に値 ('heihei',12,now()) を挿入します。 test01(name,age,gmt_created) に値('baibai',134,now()) を挿入します。 # フィルターフィールドのインデックスは更新されません test01 を更新し、name = 'xiaoxiao'、age = 2 に設定します。 エラー 1175 (HY000): セーフ更新モードを使用しており、KEY 列を使用する WHERE なしでテーブルを更新しようとしました。 # テーブル全体を更新します update test01 set name = 'xiaoxiao'; エラー 1175 (HY000): セーフ更新モードを使用しており、KEY 列を使用する WHERE なしでテーブルを更新しようとしました。 # 制限更新を追加 update test01 set name = 'xia' limit 1; クエリは正常、1 行が影響を受けました (0.00 秒) 一致した行: 1 変更された行: 1 警告: 0 # 新しいインデックスを作成します。create index idx_age on test01(age); test01 を更新し、name = 'xiaoxiao'、age = 2 に設定します。 クエリは正常、1 行が影響を受けました (0.01 秒) 一致した行: 1 変更された行: 1 警告: 0 test01 を更新し、name = 'hhh' を設定します。age = 9、limit 10; クエリは正常、1 行が影響を受けました (0.00 秒) 一致した行: 1 変更された行: 1 警告: 0 テーブル test01 を変更し、インデックス idx_age を削除します。 test01(age,name) にインデックス idx_age_name を作成します。 test01 を更新し、age を 100 に設定し、name を 'hhh' に設定します。 エラー 1175 (HY000): セーフ更新モードを使用しており、KEY 列を使用する WHERE なしでテーブルを更新しようとしました。 test01 を更新し、age を 100 に設定し、name を 'hhh' に設定し、limit を 10 に設定します。 クエリは正常、1 行が影響を受けました (0.00 秒) 一致した行: 1 変更された行: 1 警告: 0 したがって、更新時に、where条件がない場合、またはwhere条件がインデックスフィールドでない場合は、limitを使用する必要があります。where条件がある場合は、インデックスフィールド 最近、仕事で別の問題を発見しました。MySQL sql_safe_updates はサブクエリの更新をサポートしていません。 開発者が誤ってデータを更新する可能性があることを考慮して、オンライン データベースの MySQL インスタンスでは、インデックスなしでの更新と削除を回避するために sql_safe_updates=1 を設定する必要があります。 その結果、ある日、開発者は次の SQL を正しく実行できないことに気付きました。 t1 を更新し、key1 が in の場合に col2=1 を設定します (key2='ABcD' の場合に t2 から col2 を選択)。 エラーは次のとおりです: エラー 1175 (HY000): セーフ更新モードを使用しており、KEY 列を使用する WHERE なしでテーブルを更新しようとしました。 つまり、インデックスされていない where 条件を更新することはできません。調べてみたところ、確かにそれは不可能だということが分かりました。 key1 と key2 がそれぞれ t1 と t2 のインデックスであっても [主キーに変更することはできません]。説明: サブクエリの更新はサポートされていません。 グーグルで検索してみたところ、以前にも誰かがこの質問をしていたことがわかりました。 。 http://stackoverflow.com/questions/24314830/query-not-getting-executed-if-supplied-a-nested-sub-query 最終解決策: 1) セッションレベルのパラメータを変更します。sql_safe_updates 2) プログラム処理: 最初に 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
最近確認された5件のデータを照会するビジネスがあります。 `id`、`title` を選択 `th_...
エラーを報告するには次のコマンドを実行しますsystemctl dockerを再起動しますエラーメッ...
目次リナックス1. SWAPとは2. swappiness は何を調節しますか? 3. スワップ操作...
今日は、Linux でリモート アクセス用に MySQL データベースを構成する方法について質問があ...
序文Linux システムのすべてのハードウェア デバイスは、ファイルの形式で表現され、使用されます。...
目次前面に書かれたログインの概要ログインビジネスプロセスログインサービスの関連技術ポイントログイント...
目次1. シナリオ2. IJavaScriptShadowboxを実装する2.1 メインスレッドの実...
この記事では、パスワードボックスの検証情報を実装するためのJavaScriptの具体的なコードを例と...
効果は以下のとおりです。参考プログラム: <!DOCTYPE html> <htm...
目次Vue2 レスポンシブ原則のレビューVue3 レスポンシブ原則の分析ネストされたオブジェクトの応...
この記事では、Docker の使用で最もよく使用されるイメージ コマンドとコンテナ コマンドを一覧表...
目次前面に書かれた予防開発環境構築開発構成に関する注意事項前面に書かれたuni-app は、Vue....
目次1.union: クエリ結果を追加できます1) すべてを結合: 重複を削除できません2) ユニオ...
トークンの有効期限が切れたら、ページを更新します。ページの読み込み時にバックエンドに複数のリクエスト...
<本文> <div id="ルート"> <h2&...