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の例をカプセル化し、ブラウザのローカルキャッシュのアプリケーションを実装します。

推薦する

VMware Workstation に Windows Server 2019 をインストールする (グラフィック チュートリアル)

キーの入力を求められた場合は、[キーがありません]を選択します。デスクトップエクスペリエンスを選択す...

Linux nslookup コマンドの使用方法の詳細な説明

[nslookup とは?] 】 nslookup コマンドは、Linux で非常によく使用されるネ...

Javascript で関数のカリー化とデカリー化を実装する方法

関数のカリー化(黒い疑問符の顔)? ? ?カレー(黒い疑問符の顔)? ? ?これは完璧な中国語翻訳で...

MySQL で中国語の文字をピンインでソートする簡単な例

名前を格納するフィールドが GBK 文字セットを使用している場合、GBK 内部コード自体がエンコード...

HTML コード作成ガイド

共通コンベンションタグ自己終了タグ。閉じる必要はありません (例: img input br hr ...

CSS変数を使用して、クールで素晴らしいフローティング効果を実現します。

最近、Grover の Web サイトで楽しいホバー アニメーションを見つけ、自分自身のインスピレー...

Javascriptでシングルトンパターンを実装する方法

目次概要コードの実装シングルトンパターンの簡易版改良版プロキシバージョンシングルトンモード遅延シング...

Tomcat プロセスの CPU 使用率が高い場合の解決策

目次場合コンテキスト切り替えのオーバーヘッド?要約するCPU は多くの場合、システム パフォーマンス...

MySQL で 2 つのデータベース テーブル構造を比較する方法

開発およびデバッグのプロセスでは、新しいコードと古いコードの違いを比較する必要があります。比較には、...

JavaScript は、シンプルな虫眼鏡の最も完全なコード分析を実装します (ES5)

この記事では、参考までに、シンプルな虫眼鏡を実装するためのJavaScriptの具体的なコードを紹介...

Dockerコンテナを作成、起動、停止する方法

1. コンテナとは、独立して実行されるアプリケーション、またはアプリケーションのグループとその動作環...

Portainer を使用した Docker コンテナのデプロイのプロジェクト実践

目次1. 背景2. 操作手順3. Portinerをインストールする3.1 Dockerのデプロイメ...

【Webデザイン】E-WebTemplates の美しい海外の Web ページ テンプレート (FLASH+PSD ソース ファイル+HTML) を共有します

これらはすべて海外のE-WebTemplates WebサイトからのWebページテンプレートであり、...

VueはBaidu Mapsを使用して都市の位置特定を実現

この記事では、参考までに、Baidu Mapsを使用して都市の位置特定を実現するVueの具体的なコー...

Docker で Oracle 11g イメージ構成をプルダウンする際の問題を分析する

1. イメージをプルするdocker pull レジストリ.cn-hangzhou.aliyuncs...