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

推薦する

Docker コンテナのデプロイの試み - マルチコンテナ通信 (node+mongoDB+nginx)

その理由はモッカー プラットフォームを導入したかったので、友人の勧めで既成のプロジェクト api-m...

MySQL フラッシュバック ツール binlog2sql の詳細なインストールと設定のチュートリアル

概要binlog2sql は、Python で開発されたオープンソースの MySQL Binlog ...

Dockerコンテナのネットワーク管理とネットワーク分離の実装

1. Dockerネットワーク管理1. Dockerコンテナ方式1) Dockerが外部ネットワーク...

MySQLインデックスを追加する3つの原則を簡単に理解する

1. インデックスの重要性インデックスは、列に特定の値を持つ行をすばやく見つけるために使用されます。...

MySQLデータベースはMMM高可用性クラスタアーキテクチャを実装します

コンセプトMMM (Mysql のマスター マスター レプリケーション マネージャー) は、Perl...

MySQLのビューとインデックスの使い方と違いの詳細な説明

MySQL ビュー簡単に言えば、MySQL ビューは SELECT コマンドを定義するためのショート...

JavaScript BOM ロケーション オブジェクト + ナビゲーター オブジェクト + 履歴オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...

MySQLデータベースのnullに関する知識ポイントのまとめ

MySQL データベースでは、null は一般的な状況です。MySQL での null に関する注意...

JavaScriptを使って動的にテーブルを生成するケースの詳しい説明

目次序文実装のアイデア実装コード成果を達成する序文これは、テーブルを動的に追加する例です。[追加] ...

MySQL のインデックスとデータ テーブルを管理する方法

目次テーブルの競合を見つけて修正するインデックス統計の更新テーブルの競合を見つけて修正するデータ テ...

CSS3 は下部に固定されたフッターを実装します (ページの高さに関係なく常に下部にあります)

序文フッター領域を下部に固定します。ページの高さや幅に関係なく、モバイル メニューと同様に、フッター...

MySQL SELECT実行順序の簡単な理解

SELECT ステートメントの完全な構文は次のとおりです。 (7)選択 (8) DISTINCT ...

HTML シンプルショッピング数量アプレット

この記事では、参考までにシンプルなHTMLショッピング数量アプレットを紹介します。具体的な内容は次の...

さまざまな MySQL テーブルソートルールのエラーの分析

MySQL が複数のテーブルを結合するときに、次のエラーが報告されます: [Err]1267 – 操...

HTMLの基本構文は、HTMLを学び始めたばかりの人にとって便利です。

1.1 一般的なマーキング一般的なタグは開始タグと終了タグで構成されます。構文は次のとおりです: ...