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属性の設定の詳細な説明

推薦する

背景画像に CSS3 変換を適用するためのソリューション

CSS 変換は便利ですが、背景画像にはまだ適用されていません。この投稿では、背景画像を回転させたい場...

背景位置パーセンテージ原則の詳細な説明

今日、誰かがコードを調整するのを手伝っていたとき、次のようなスタイルを見つけました。 背景位置: 5...

Ubuntu 18.04 向け VMware Tools のインストールと構成のチュートリアル

この記事では、Ubuntu 18.04でのVMware Toolsのインストールと設定について記録し...

MySQL Binlog ログの読み取り時によくある 3 つのエラー

1. mysqlbinlog: [エラー] 不明な変数 'default-character...

jQuery ツリービュー ツリー構造アプリケーション

この記事では、jQueryツリービューツリー構造のアプリケーションコードを例として紹介します。具体的...

VMware 仮想マシンに CentOS と Qt をインストールするチュートリアル図

VMware のインストールパッケージのインストールダウンロードアドレス: https://www....

CSSオーバーフローメカニズムについての簡単な説明

CSS オーバーフローのメカニズムを詳細に学ぶ必要があるのはなぜですか?実際の開発プロセスでは、コン...

Ubuntu 上の MySQL における中国語文字化け問題の解決方法

問題を見つける最近 Django を学習しているのですが、MySQL データと組み合わせてデータを挿...

一般的なDockerコマンドの詳細な説明

1. ヘルプコマンド1. 現在のDockerバージョンを表示する docker バージョン2. イメ...

Vueはフィルターを使用して日付をフォーマットします

この記事では、フィルターを使用して日付をフォーマットするVueの具体的なコードを参考までに紹介します...

MySQLパスワードを変更するいくつかの方法

序文:データベースを日常的に使用すると、パスワードが単純すぎて変更する必要がある場合、パスワードの有...

MySQL 8のパスワードを忘れた場合のベストな対処法の簡単な分析

序文MySQL に精通している読者は、MySQL が非常に迅速に更新されることに気付くかもしれません...

PhpStormがVirtualBoxに接続できない問題を解決する

問題の説明: phpstorm の SFTP ホストを 192.168.122.1 に設定すると、接...

CSS3 のメディアクエリと rem レイアウトを組み合わせてモバイル画面に適応

CSS3 構文: (750 ピクセルのデザインの場合、1rem = 100 ピクセル) @media...

Mybatisの特殊文字処理の詳細な説明

序文: Mybatis の特殊文字処理、Mybatis の xml ファイル内の特殊文字の処理、ここ...