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 で server.xml と content.xml を変更した後の自動復元の問題の解決方法

設定ファイルを server.xml と content.xml に書き込みます。サーバーを再起動す...

CSS3 rgb と rgba (透明色) の使い方の詳しい説明

誰もが色にとても敏感だと思います。私たちの目が見るところにはどこにでも色があります。では、CSS で...

DIV の一般的なタスク (パート 1) — 一般的なタスク (スクロール バーの表示、div の非表示、イベント バブリングの無効化など)

最も一般的に使用されるレイアウト要素として、DIV は Web 開発において重要な役割を果たします。...

DockerでMySQLコンテナを作成する簡単な手順

序文すでに Docker をインストールしており、Docker について簡単に理解しています。ここで...

lastInfdexOf 関数の MySQL 実装例

MySQL では lastIndexOf に似た関数を使用する必要がある場合もありますが、すぐに使用...

バッテリー残量が少なくなったときに Linux を自動シャットダウンする方法

序文最近、私の住居の電力事情が不安定で、突然の停電が頻繁に起こります。ノートパソコンを持っているので...

nginx 設定チュートリアルにおける add_header の落とし穴の詳細な説明

序文add_header は、headers モジュールで定義されたディレクティブです。名前が示すよ...

Vue は div の高さをドラッグ可能にします

この記事では、divのドラッグ可能な高さを実現するためのVueの具体的なコードを参考までに共有します...

JavaScript の条件付きアクセス属性と矢印関数の紹介

目次1. 条件付きアクセス属性2. アロー関数の紹介1. 条件付きアクセス属性?. は ES2020...

MySQLデータベースのロック機構の分析

同時アクセスの場合、非反復読み取りやその他の読み取り現象が発生する可能性があります。高い同時実行性に...

Vue3 ミックスインの使い方

目次1. mixin の使い方は? 2. ミックスイン使用時の注意2.1. ミックスイン オブジェク...

Vue の計算プロパティとリスナーの使用の概要

1. 計算プロパティとリスナー1.1 計算プロパティ <!DOCTYPE html> &...

Centos は chrony 時間同期サーバー プロセス図を構築します

私の環境: 3 centos7.5 1804マスター 192.168.100.140ノード1 192...

Angular の 12 の典型的な問題について簡単に説明します

目次1. Angular 2 アプリケーションのライフサイクル フックとは何ですか? 2. Angu...

JSはフロントエンドのページング効果を実現します

この記事の例では、フロントエンドのページング効果を実現するためのJSの具体的なコードを参考までに共有...