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

推薦する

Gitlab-ci を使用してリモート マシンに継続的にデプロイする方法 (詳細なチュートリアル)

簡単に言うと、今日は Gitlab-CI を使用してリモート サーバーに自動的にデプロイする方法につ...

Linux LVM 論理ボリューム構成プロセス (作成、増加、削減、削除、アンインストール) の詳細な説明

Linux LVM論理ボリューム構成プロセスの詳細な説明多くの Linux ユーザーは、オペレーティ...

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

GUNスクリーン:公式サイト: http://www.gnu.org/software/screen...

Vue.js のミックスインの詳細な説明

ミックスインは、コンポーネントに分散された再利用可能な機能を柔軟な方法で提供します。 Mixin オ...

MySQLトリガーの使用

目次1. トリガーの紹介1. トリガーとは何ですか? 2. トリガーの特徴2. トリガーを作成する1...

Windows Server 2008R2 ファイル サーバーを Windows Server 2016 にアップグレードする

ユーザー組織には、ドメインに参加している 2 台の Windows Server 2008 R2 フ...

React コンポーネントのコンストラクタとスーパーの知識ポイントのまとめ

1. Reactでクラス宣言する際のヒント 上記のように、Child クラスは class キーワー...

1つの記事でJavaScript DOM操作の基本を学ぶ

DOM の概念DOM: ドキュメント オブジェクト モデル: ドキュメント オブジェクト モデルは、...

CentOS 8 / RHEL 8 に VirtualBox 6.0 をインストールするための詳細なチュートリアル

VirtualBox は、技術者が異なる種類の複数の仮想マシン (VM) を同時に実行できるようにす...

MySQL 5.0.96 for Windows x86 32 ビット グリーン簡易版インストール チュートリアル

MySQL 5.0 は、いくつかの「高度な機能」があるため定番となっています。これは、Windows...

mysql はフィールドコンテンツの一部を置き換え、mysql は関数 replace() を置き換えます。

[mysql] replace の使用方法 (フィールドの内容の一部を置き換える) [mysql]...

Mysql で group_concat の長さ制限を変更する方法

MySQL には、「group_concat」という関数があります。通常の使用では問題がないかもしれ...

Centos7環境でYUMを構築する方法

1. yumソースの設定ファイルを入力します 2.lsで設定ファイルを表示する 3. ディレクトリを...

JavaScriptイテレータを学ぶ

目次導入js のイテレータはどのように見えるか反復プロトコル反復可能なプロトコルイテレータプロトコル...

Docker を使用して Go Web アプリケーションをデプロイする方法

目次なぜ Docker が必要なのでしょうか? Docker デプロイメントの例コードの準備Dock...