MySQL はどのようにしてデータベースの削除と暴走を効果的に防ぐことができますか?

MySQL はどのようにしてデータベースの削除と暴走を効果的に防ぐことができますか?

一部の開発者が個人的なミスにより、ステートメントを削除または更新するときに where 句を追加せず、テーブル データ全体が混乱したという話を聞いたことがあるはずです。

MySQL セーフ モード: MySQL は、削除または更新ステートメントに where 条件または limit 条件がないことがわかった場合、エラーを報告します。 SQL ステートメント全体は実行されないため、テーブルが誤って削除されることが効果的に防止されます。

セーフモード設定

次のコマンドを使用して、mysql のステータスを確認します。

 「sql_safe_updates」のような変数を表示します。

ここに画像の説明を挿入

デフォルトの状態は OFF です。状態を ON に設定するだけです。

  • set sql_safe_updates=1; //開く
  • set sql_safe_updates=0; //閉じる

ONに設定後

  • 更新ステートメント: where 条件の列に使用できるインデックスがなく、制限がない場合、更新は拒否されます。 where 条件が定数であり、制限がない場合、更新は拒否されます。
  • 削除ステートメント: ①WHERE 条件が定数である、②WHERE 条件が空である、③WHERE 条件内の列に使用可能なインデックスがなく、制限もない場合は、削除は拒否されます。

テスト

セーフモードでテストする

1. where句なしで更新および削除する

delete from t_user

t_user から削除
> 1175 - セーフ更新モードを使用しており、KEY 列を使用する WHERE なしでテーブルを更新しようとしました
> 時間: 0.001秒

update t_user set name='123'

t_user を更新して名前を '123' に設定
> 1175 - セーフ更新モードを使用しており、KEY 列を使用する WHERE なしでテーブルを更新しようとしました
> 時間: 0.001秒

2. 非インデックスキーの削除

delete from t_user where name='123'

名前が '123' である t_user から削除
> 1175 - セーフ更新モードを使用しており、KEY 列を使用する WHERE なしでテーブルを更新しようとしました
> 時間: 0.007秒

削除の where 条件がインデックス キーでない場合は、制限を追加する必要があります。

delete from t_user where name='123' limit 1

t_user から削除、name='123' 制限 1
> 影響を受ける行: 0
> 時間: 0.002秒

3. インデックスキーを削除する

delete from t_user where group_id='123'

group_id='123' の t_user から削除
> 影響を受ける行: 0
> 時間: 0秒

要約する

sql_safe_updates=1が設定されている場合、 updateステートメントが正常に実行されるには、次のいずれかの条件を満たす必要があります。

  • where句を使用します。where句の列はプレフィックスインデックス列である必要があります。
  • 制限の使用
  • where句とlimitを同時に使用します(where句の列はインデックス列である必要はありません)

deleteステートメントが正常に実行されるには、次のいずれかの条件を満たす必要があります。

  • where句を使用します。where句の列はプレフィックスインデックス列である必要があります。
  • 実行は、where 句と limit (where 句内の列はインデックス列である必要はありません) が同時に使用される場合にのみ成功します。

これで、MySQL がデータベースを削除しないように効果的に防止する方法についての記事は終了です。MySQL がデータベースを削除しないようにする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLでよく使われるSQLとコマンドの入力からデータベースの削除、そして終了まで
  • データベースの削除から逃走までの MySQL の徹底分析_上級編 (I) - データ整合性
  • データベースを削除して逃げる?xtraback を使用して MySQL データベースをバックアップする方法

<<:  jsは配列の平坦化を実装します

>>:  HTMLにおけるbackground-image属性の設定の詳細な説明

推薦する

LinuxでTomcatのポート番号を変更する方法

ここには複数の Tomcat があります。それらを同時に使用する場合は、ポート番号を別の番号に変更す...

CSS の高度な使い方(実戦で活用)

1. ul タグには、Mozilla ではデフォルトでパディング値がありますが、IE ではマージン値...

Debian Dockerコンテナにcrontabスケジュールタスクを追加する

現在、DockerイメージのほとんどはDebianベースです # cat /etc/issue De...

ElementuiはデータをxlsxとExcelテーブルにエクスポートします

最近、Vue プロジェクトについて知り、ElementUI でデータを xlsx および Excel...

CentOS に MySQL をインストールしてリモート アクセスを設定する方法

1. MySQLリポジトリソースをダウンロードする$ wget http://repo.mysql....

Ubuntu 20.04 ベスト設定ガイド (初心者向け)

1. システム構成1. sudoパスワードをオフにするsudo コマンドを使用するたびにパスワード...

Centos7 システム上の nginx サーバーで Phalcon 環境を構築する方法の詳細な説明

この記事では、centos7 システムの nginx サーバーの下に phalcon 環境を構築する...

dockercompose を使用して springboot-mysql-nginx アプリケーションをビルドする

前回の記事では、Docker を使用して、コンパイルされた jar パッケージをイメージに組み込む ...

MySQL の基本: グループ化関数、集計関数、グループ化クエリの詳細な説明

目次1. 使い方が簡単2. DISTINCTを使用して重複を削除する3. COUNT()の詳細な紹介...

MySQL (8 および 5.7) の Docker インストール

この記事では、Dockerを使用してMySQLデータベースとリモートアクセス構成をデプロイする方法を...

制限およびオフセット ページング シナリオを使用すると速度が遅くなるのはなぜですか?

質問から始めましょう5 年前、私が Tencent にいたとき、ページング シナリオでは MySQL...

Linux システムで Code Cloud にプロジェクトをアップロードする方法

Code Cloudで新しいプロジェクトtest1を作成します。 公開鍵を取得するには次のコマンドを...

Nginx 設定ファイルの詳細な説明と最適化の提案ガイド

目次1. 概要2. nginx.conf 1) 設定ファイルの場所2) ワーカープロセス3) イベン...

MySQL でコマンドを使用して階層検索を実現する方法の詳細な説明

序文この記事は主にMySQLコマンド階層検索ヘルプの使用に関する内容を紹介します。この記事のサンプル...

JavaScript オブジェクトからプリミティブ値への変換の詳細な説明

目次オブジェクトプロトタイプの値()オブジェクトプロトタイプtoString()シンボル.toPri...