mysqlパラメータsql_safe_updatesを使用して更新/削除範囲を制限する方法の詳細な説明

mysqlパラメータsql_safe_updatesを使用して更新/削除範囲を制限する方法の詳細な説明

序文

皆さんご存知のとおり、MySQL の運用・保守において、更新/削除条件が誤っているためにデータが誤って更新または削除されてしまうケースが数多く発生しています。同様の問題を回避するには、sql_safe_updates パラメータを使用して更新/削除を制限することができます。このパラメータをオンに設定すると、プログラムのバグや DBA の手動エラーによってテーブル全体が更新または削除されるのを防ぐことができます。早速、詳しい紹介を見ていきましょう。

このパラメータを設定する際に注意すべき点がいくつかあります。

a. 設定する前に、プログラム内のすべての更新と削除が sql_safe_updates の制限に準拠していることを確認する必要があります。そうでない場合、プログラムはエラーを報告します。

b. 5.0 と 5.1 は両方ともセッション レベルですが、5.6 はグローバルおよびセッション レベルです。下位バージョンのデータベースでは、 set sql_safe_updates=on;上位バージョンのデータベースでは、 set global set sql_safe_updates=on 、設定が完了したらプログラムを再接続して設定を有効にできます。

制限仕様:

テーブル構造の例:

テーブル `delay_monitor` を作成します (
 `id` int(11) NULLではない、
 `Ftime` 日時 デフォルト NULL、
 `Fgtid` varchar(128) NOT NULL デフォルト ''
 主キー (`id`)
) エンジン=InnoDB デフォルト文字セット=latin​

1. 更新

a. エラー条件: where なし、where ありだがインデックスなし、where 条件が定数

where なし: update delay_monitor set Ftime=now();

where あり、インデックスなし: update delay_monitor set Ftime=now() where Fgtid='test';

条件が定数の場合: update delay_monitor set Ftime=now() where 1;

b. 実行条件: where とインデックスあり、where + 制限なし、where あり、インデックス + 制限なし、where とインデックス + 制限あり、where 条件は定数 + 制限

where と index を使用する場合: update delay_monitor set Ftime=now() where id=2;

where なし、limit あり: update delay_monitor set Ftime=now() limit 1;

where no index + limit の場合: update delay_monitor set Ftime=now() where Fgtid='test' limit 1;

where index + limit の場合: update delay_monitor set Ftime=now() where id =2 limit1;

条件が定数 + 制限の場合: update delay_monitor set Ftime=now() where 1 limit 1;

2. 削除

update と比較すると、delete にはより厳しい制限があり、where 条件が定数または空の場合は実行されません。

a. エラー条件: where なし、where ありだがインデックスなし、where なし + 制限あり、where 条件が定数、where 条件が定数 + 制限

where なし: delete delay_monitor set Ftime=now();

where あり、インデックスなし: delete delay_monitor set Ftime=now() where Fgtid='test';

where なし、limit あり: delete delay_monitor set Ftime=now() limit 1;

条件が定数の場合: delete delay_monitor set Ftime=now() where 1;

条件が定数 + 制限の場合: delete delay_monitor set Ftime=now() where 1 limit 1;

b. 実行条件: where とインデックスあり、where とインデックス + 制限なし、where とインデックス + 制限あり

where と index を使用する場合: delete delay_monitor set Ftime=now() where id=2;

where no index + limit の場合: delete delay_monitor set Ftime=now() where Fgtid='test' limit 1;

where index + limit の場合: delete delay_monitor set Ftime=now() where id =2 limit1;

要約すると、keyはすべてを意味し、constは定数を意味します。

操作するどこにもキーどこにもない制限ここで、nokey+limitキー+制限ここで定数ここで、const+limit
消去いいえはいいいえいいえはいはいいいえいいえ
アップデートいいえはいいいえはいはいはいいいえはい

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • 本番環境でのMySQLパラメータsql_safe_updatesの使用に関する詳細な説明

<<:  MySQL で時刻と日付の型を保存する際の選択問題を分析する

>>:  VueはTodoListの例をカプセル化し、ブラウザのローカルキャッシュのアプリケーションを実装します。

推薦する

tomcat ログ ディレクトリ内のログ ファイルの分析 (概要)

tomcat が起動されるたびに、次のログ ファイルがログ ディレクトリに自動的に生成され、日付順...

MySQL 更新セットとの違い

目次問題の説明原因分析解決問題の説明最近、奇妙な問い合わせを受けました。更新ステートメントはエラーな...

MySQL での utf8mb4 照合の例

MySQL における一般的な utf8mb4 ソート規則は次のとおりです。 utf8mb4_0900...

CPU、マシンモデル、メモリなどの情報を表示するLinuxシステム

システムメンテナンス中は、いつでも CPU 使用率を確認し、対応する情報に基づいてシステムの状態を分...

React antdはフォームの動的な増減を実現します

以前、動的フォームを記述しているときに落とし穴に遭遇しました。インデックスの添え字をキーとして使用す...

Vueはカードフリップ効果を実現します

この記事では、カードフリップ効果を実現するためのVueの具体的なコードを例として紹介します。具体的な...

MySQL インデックスが失敗するいくつかの状況の概要

1. インデックスはnull値を保存しないより正確に言うと、単一列インデックスには null 値は格...

Linux で MongoDB のリモート自動バックアップを実装する方法

序文古いプロジェクトを引き継ぐ苦労 - MongoDB クラスターの学習と構築に関する前回の記事を読...

W3Cチュートリアル(1):W3Cを理解する

1994 年に設立された組織である W3C は、共通プロトコルの開発を促進し、それらの相互運用性を確...

JavaScript のデシェイクとスロットリングの例

目次安定スロットル: 手ぶれ防止: 一定時間内に最後のタスクのみを実行します。スロットル: 一定期間...

Docker ベースの MySQL マスタースレーブ レプリケーションを実装する方法

序文MySQL マスター/スレーブ レプリケーションは、アプリケーションの高パフォーマンスと高可用性...

HTMLを使用してシンプルなメールテンプレートを作成する

今日は、「ローテク」の問題について書きたいと思います。ちなみに、私は JavaScript Week...

Vueプロジェクトでよく使われる実践的なスキルのまとめ

目次序文1. マルチレベルのデータとイベントの配信には$attrsと$listenersを使用する2...

Vue が価格カレンダー効果を実現

この記事では、価格カレンダー効果を実現するためのVueの具体的なコードを例として紹介します。具体的な...

HTML要素を非表示にするいくつかの方法

1. CSSを使用するコードをコピーコードは次のとおりです。スタイル="display:n...