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 オブジェクト (詳細)

推薦する

vue の v-for ディレクティブはリストのレンダリングを完了します

目次1. リストの走査2. Vueにおけるキーの役割3. リストフィルタリングこの記事では、Vue ...

CUDA10.0 のインストールと Ubuntu での問題

Tensorflow バージョンと Cuda および CUDNN の対応: https://tens...

Win10 での MySQL 8.0 ログインでユーザー 'root'@'localhost' のアクセスが拒否される (パスワード使用: YES) 問題の解決方法

最近、MySQL を学び始めました。インストールはスムーズに進み、インターネット上の既成のチュートリ...

deepin20 で NVIDIA クローズドソース ドライバーをインストールするための詳細な手順

ステップ1: ディープ「グラフィックドライバー」をインストールするdeepin v20にはデフォルト...

Vue3 における非親子コンポーネントの値転送の詳細な説明

目次アプリ.vueサブ1.vueサブ2.vue要約する vue2 における非親子コンポーネントの値の...

Docker で Kong API Gateway をインストールして使用する詳細なチュートリアル

1 はじめにKong は単純な製品ではありません。この記事で言及されている Kong は主に Kon...

Vueウォッチの監視方法の概要

目次1. Vueにおけるwatchの役割はその名の通り、監視の役割です。 2. このオブジェクトのプ...

Linux で 1 回限りのスケジュールされたタスクを実行するための at コマンドの使用に関する詳細な説明

目次序文1. 一度限りの計画タスクの紹介2. コマンド3. 1回限りのスケジュールタスクを作成する4...

Vue での bimface の使用に関する詳細

目次1. Vue スキャフォールディングをインストールする2. プロジェクトを作成する3.1 プロジ...

Vueがsweetalert2プロンプトコンポーネントを統合する際の問題についてお話ししましょう

目次1. プロジェクト統合1. CDNインポート方法: 2. 箱の梱包を確認する3. 迅速な箱詰め4...

CSS のサイズ単位についての簡単な説明

ブラウザの互換性はどんどん良くなってきています。モバイル端末は基本的にすべてWebKitベースです。...

MySQL 8.0.12 インストール設定方法とパスワード変更

この記事ではMySQL 8.0.12のインストールと設定方法を参考までに記録します。具体的な内容は以...

vuex での Getter の使用法の詳細な説明

序文Vuex を使用すると、ストア内に「ゲッター」を定義できます (これはストアの計算されたプロパテ...

JS 関数とコンストラクタを簡単に理解する

目次1. 概要1.1 Functionコンストラクタを使用して関数を作成する1.2 機能と目的2. ...

MySQLは間違ったパスワードを入力する試行回数を制御します

1. 本番環境でMySQLのデッドロックを監視し、デッドロックの可能性を減らす方法まず、デッドロック...