MySQLのトランザクション管理操作の詳細な説明

MySQLのトランザクション管理操作の詳細な説明

この記事では、MySQL のトランザクション管理操作について説明します。ご参考までに、詳細は以下の通りです。

この記事の内容:

  • トランザクション管理とは
  • トランザクション管理操作
  • ロールバックポイント
  • デフォルトのトランザクション管理

リリース日: 2018-04-18


トランザクション管理とは:

  • 実行される一連の操作はトランザクションと呼ばれ、トランザクション管理はこれらの操作が完全に実行されるか、まったく実行されないかを管理することです (典型的な例: A が B に送金したい場合、最初に A のお金が減りますが、突然データベースの電源が落ちて B にお金を追加できなくなり、次にデータが失われたため、B は A のお金の受け取りを確認しません。ここで、トランザクションはお金の追加とお金の引き落としの両方が完全に実行されるか、まったく実行されないかを確認します。お金の追加が失敗すると、お金の引き落としは行われません)。
  • トランザクション管理の重要性: データ操作の整合性を確保する。
  • MySQL のすべてのデータ エンジンがトランザクション管理をサポートしているわけではなく、InnoDB のみがトランザクション管理をサポートしています。

トランザクション管理機能:

  • 原子性: トランザクションの操作全体が 1 つのまとまりであり、分割できません。すべてが成功するか、すべてが失敗します。
  • 一貫性: データ テーブル内のデータは、トランザクション操作の前後で変更されません。
  • 分離: トランザクション操作は互いに分離されており、影響を受けません。
  • 永続性: データが送信されると変更できなくなり、データ テーブルのデータは永続的に変更されます。

トランザクション管理操作:

  • トランザクション管理を有効にする: 有効にすると、次の SQL ステートメントはすぐに実行されず、結果はテーブルに書き込まれませんが、トランザクション ログに書き込まれます。
    • トランザクションを開始します。
  • ロールバック操作: ロールバックは、トランザクション管理の開始後にトランザクション ログに書き込まれた内容をクリアし、トランザクション管理を開始する前の状態に復元します。
    • 構文: rollback;
    • 注意: ロールバック操作では、「書き込まれた」コンテンツのみがロールバックされ、通常のテーブル読み取り選択ステートメントはロールバックできません。
  • トランザクションのコミット: SQL ステートメントの結果をデータ テーブルに書き込みます。
    • 構文: commit:

実験テーブル:

テーブル bankaccount(id int primary key auto_increment,name varchar(15),money int) を作成します。
bankaccount(name,money) に値 ("Jobs",2000) を挿入します。
bankaccount(name,money) に値 ("Bill",3000) を挿入します。 

image

image

補充:

  • コミットまたはロールバック ステートメントが実行されると、トランザクションは自動的に閉じられます (将来の変更は暗黙的にコミットされます)。
  • ロック メカニズム: トランザクションがテーブルを操作するときに、インデックスを使用して値を取得すると、対応する行がロックされます。インデックスを使用して値を取得しない場合は、テーブル全体がロックされます。ロック後は、他の接続は指定された行またはテーブルを操作できなくなります。

ロールバックポイント:

  • ロールバック ポイントでは、ロールバックの場所を指定できます。たとえば、100 個のコマンドを入力し、81 番目のコマンドが誤って入力されたことが判明した場合、トランザクションが開始される前ではなく、コマンド 81 より前の時点にロールバックすると、多くの時間を節約できます。 】
  • 文法:
    • ロールバック ポイントを作成します: savepoint ロールバック ポイント名;
    • ロールバック ポイントへのロールバック: ロールバック ポイント名へのロールバック;

image

補充:

  • ロールバックポイントは、トランザクション管理が終了した後(ロールバックまたはコミット後)は無効になります。ロールバックポイントをトランザクション外で使用しないでください。

デフォルトのトランザクション管理:

  • デフォルトでは、MySQL トランザクション管理はオフ (自動トランザクション) になっており、ステートメントの結果はデー​​タ テーブルにすぐに書き込まれます。
    • 自動トランザクションが有効になっているかどうかを確認するには、「autocommit」のような show variable を使用できます。値が 1 の場合は自動トランザクションが有効になっていることを意味し、値が 0 の場合は無効になっていることを意味します。
  • 自動トランザクションをオフにする: set autocommit = 0; [オフにすると、各ステートメントを実行するためにコミットが必要になり、トランザクション管理を開始するのと同じになります]
    • ただし、set autocommit はセッション変数用であるため、この設定はこのセッション接続でのみ有効であることに注意してください。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL トランザクション操作スキルのまとめ」、「MySQL インデックス操作スキルのまとめ」、「MySQL よく使用される関数のまとめ」、「MySQL ログ操作スキルのまとめ」、「MySQL ストアド プロシージャ スキルのまとめ」、および「MySQL データベース ロック関連スキルのまとめ」。

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL のロングトランザクション例の詳細な説明
  • MySQLトランザクションとMySQLログの詳細な説明
  • MySQLトランザクションとSpring分離レベルの実装原理の詳細な説明
  • MySQL トランザクションの概念と使用法の詳細な説明
  • MySQL トランザクション分離レベルの表示と変更の例
  • MySQL トランザクション、分離レベル、ロックの使用例の分析
  • MySQL でトランザクションのコミットとロールバックを実装する方法の詳細な例
  • MYSQL トランザクション チュートリアル Yii2.0 マーチャント引き出し機能
  • MySQL でコミットされていないトランザクション情報を見つける方法
  • MySQLにおけるACIDトランザクションの実装原理の詳細な説明
  • MySQL クロスデータベーストランザクション XA 操作の例
  • MySQLのロングトランザクションに関する深い理解

<<:  DockerでSpringbootプロジェクトを実行する方法

>>:  JavaScript オブジェクト (詳細)

推薦する

モバイル開発における 1px ラインの理解と解決策

1pxの線が太くなる理由モバイルプロジェクトに取り組むとき、設計図に従って要素ノードのサイズとスタイ...

docker ログが取得できない問題の解決方法

毎日サービスをチェックしているときに、portainer からコンテナ ログを確認しようとしたところ...

CentOS7環境にMySQL5.5データベースをインストールする

目次1. 現在のシステムにMySQLがインストールされているかどうかを確認する2. インストールされ...

JavaScript CollectGarbage 関数の例

まず、メモリ解放の例を見てみましょう。 <スクリプト言語="JavaScript&q...

64 ビット CentOs7 ソース コードのインストール mysql-5.6.35 プロセス共有

インストールプロセス中に問題が発生しないように、まず依存パッケージをインストールします。 [root...

MySQL 8.0.16 Win10 zip バージョンのインストールと設定のグラフィック チュートリアル

この記事では、MySQL 8.0.16 Win10 zip版のインストールと設定のグラフィックチュー...

Vueを使い始める際に習得する必要がある知識について簡単に説明します

最も人気のあるフロントエンド フレームワークの 1 つとして、Vue は多くのフロントエンド開発エン...

MySQL 8.0.11 圧縮版のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0圧縮パッケージのインストール方法、詳細は次のとおりです知らせ:オペレーティング シ...

MySQL 8.0 のユーザーとロールの管理原則と使用方法の詳細

この記事では、MySQL 8.0 のユーザーとロールの管理について例を挙げて説明します。ご参考までに...

訪問者を惹きつけるウェブサイトコンテンツを作成する14の方法

ネットサーフィンをしていると、私の注意を引こうとする美しいグラフィックでいっぱいの Web サイトを...

MySQL でコミットされていないトランザクション情報を見つける方法

少し前に、「ORACLE でコミットされていないトランザクションの SQL ステートメントを見つける...

VMware Workstation のインストール (Linux カーネル) Kylin グラフィック チュートリアル

この記事では、VMware WorkstationにKylinをインストールする方法を参考までに紹介...

WeChatアプレットが連携メニューを実現

最近はコース設計を実現するために、フロントエンドも少しやっています。今日はいくつかの機能を実現するた...

js を使用して 2 つの HTML ウィンドウ間で通信する方法

シナリオ: ページAがページBを開くと、ページBで操作した後、ページAは変更されたデータを同期する必...

Nginx の動的および静的分離実装ケースのコード分析

静的と動的の分離動的リクエストと静的リクエストはミドルウェアを通じて分離され、不要なリクエストの消費...