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

推薦する

MySQLは、where in()順序ソートを実装するためにfind_in_set()関数を使用します。

この記事では、MySQL で find_in_set() 関数を使用して where in() の順...

HTML+CSSプロジェクト開発経験概要(推奨)

ここ数日ブログを更新していませんでした。簡単な HTML+CSS プロジェクトを終えたところです。数...

HTML チュートリアル: 定義リスト

<br />原文: http://andymao.com/andy/post/104.h...

Vueルータールーティングガードの詳細な説明

目次1. グローバル beforeEach 1. グローバル beforeEach 2. 実装2. ...

ユーザーはその理由を知る必要がある

証券会社にいた頃、設計業務が忙しくなかったため、商品のマニュアルを書く役割を担ったことがありました。...

Nginx で https をアップグレードする方法

購入証明書Alibaba CloudのCloud Shield証明書サービスから購入できます。証明書...

CentOS7 ファイアウォールとポート関連コマンドの紹介

目次1. ファイアウォールの現在の状態を確認する2. ファイアウォールサービスを開始する3. ファイ...

MySQLデータベースを誤って削除した後にデータを回復するための手順

日々の運用・保守作業において、MySQL データベースのバックアップは重要です。ウェブサイトにとって...

Spark と Scala を使用して Apache アクセス ログを分析する方法

インストールまず、Java と Scala をインストールし、次に Spark をダウンロードしてイ...

HTMLでアンカーの位置を設定するためのいくつかの一般的な方法

HTML でアンカーの位置を設定する方法はいくつかあるので、ここで紹介します。 1. ID ポジショ...

MySQL 5.7.17 winx64 のインストールと設定のグラフィックチュートリアル

MySQL のインストールに関する以前のメモを要約して、皆さんと共有しました。ステップ 1: mys...

DockerはMysql、.Net6、Sqlserverなどのコンテナをデプロイします

目次CentOS 8にDockerをインストールする1. yumを更新する2. containerd...

MySQL 空間データストレージと関数

目次1. データ型1. MySQL空間データとは何か2. GeoJSONとは3. 空間データ型のフォ...

Linux システムで jmeter を実行し、ローカル メモリを最適化する方法の詳細な説明

1. Linuxシステムにクロスシステムファイル転送ツールをインストールするルートユーザーのルートデ...

XHTML の珍しいが便利なタグ

Xhtml には、あまり使用されないが非常に便利なタグが多数あります。半分の労力で 2 倍の結果を達...