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

推薦する

CSS BEM 命名標準の概要 (推奨)

1 BEM命名標準とはBem は、ブロック、要素、修飾子の略語であり、Yandex チームによって...

タブ切り替え効果を実現するJavaScript

この記事では、タブ切り替え効果を実現するためのJavaScriptの具体的なコードを参考までに紹介し...

jQueryはキャンバスタグを使用して検証コードを描画します

<canvas> 要素は、クライアント側のベクター グラフィックス用に設計されています。...

Ubuntu環境にAnaconda3をインストールするための完全な手順

目次Anaconda の紹介1. ダウンロード1.1 インストールパッケージを保存するフォルダを作成...

MySQL 起動エラーを解決する: エラー 2003 (HY000): 'localhost' の MySQL サーバーに接続できません (10061)

このエラーは初心者によく発生します。この記事では主に、エラー 2003 (HY000): '...

MySQL 8.0 ウィンドウ関数の紹介と概要

序文MySQL 8.0 より前は、Oracle、SQL SERVER、PostgreSQL などの他...

Vue は PC カメラを呼び出してリアルタイムで写真を撮る機能を実装します

VueはPCカメラを呼び出してリアルタイムで写真を撮影します。参考までに、具体的な内容は次のとおりで...

Nest.js 環境変数の設定とシリアル化の詳細な説明

環境変数の設定の簡単な説明プログラムは、環境によって異なる環境変数を必要とします。たとえば、実稼働環...

Web プロジェクト開発 JS 機能の手ぶれ補正とスロットリングのサンプル コード

目次安定導入手ぶれ補正シーン1(マウスの動き込み)手ぶれ補正シーン2(キーボードのキー)関数のスロッ...

Linux TTY/PTS の違いの概要

キーボードで文字を入力すると、対応するプロセスにどのように送信されるのでしょうか? ps や who...

WeChatミニプログラムをTencent Mapsに接続する2つの方法

最近、WeChat アプレットを作成しているのですが、いくつか問題が発生しました。インターネットでい...

nginx を使用してカナリアリリースをシミュレートする方法

この記事では、ブルーグリーン デプロイメントと、nginx を使用してカナリア リリースを最も簡単な...

ウェブサイトのコンテンツの100~1%はナビゲーションである

ウェブサイトでは、コンテンツの(100-1)%がナビゲーションです1. ジェシー・ジェームズ・ギャレ...

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

1. ドキュメントフローとフローティング1. ドキュメントフローとは何ですか? HTML では、ドキ...

LinuxにMySQLをインストールするための詳細なチュートリアル

すべてのプラットフォーム用の MySQL ダウンロードは、MySQL ダウンロードから入手できます。...