mysql と oracle のデフォルトのトランザクション分離レベルの説明

mysql と oracle のデフォルトのトランザクション分離レベルの説明

1. トランザクション特性(ACID)

(1)原子性トランザクションに関係するプログラムによって実行されるデータベース変更操作は、すべて成功するか、すべて失敗します。

(2)一貫性トランザクションが実行される前と実行後に、ソースと宛先のバランスが取られます。

(3)孤立同時実行中、各トランザクションは分離され、互いに影響を及ぼしません。

(4)耐久性トランザクションが正常にコミットされると、データの整合性が保証されるはずです。

2. トランザクション分離レベル

(1)コミットせずに読む

すべてのトランザクションは、コミットされていないトランザクションのデータを見ることができます。

(2)コミットされた読み取り

トランザクションは、正常に送信された後にのみ照会できます。

(3)繰り返し可能

同じトランザクションの複数のインスタンスがデータを読み取る場合、コミットされていないレコードが照会され、ファントム読み取りが発生する可能性があります。 mysql デフォルトレベル

(4)シリアル化可能

強制的にソートし、読み取られた各データ行に共有ロックを追加します。これにより、多くのタイムアウトとロック競合が発生します。

マイグレーション

MySQLのデフォルトのトランザクションレベルは「REPEATABLE-READ」で、これは繰り返し読み取りを意味します。

1. 現在のセッション分離レベルを表示する

@@tx_isolation を選択します。

2. システムの現在の分離レベルを表示する

@@global.tx_isolation を選択します。

3. 現在のセッション分離レベルを設定する

セッショントランザクション分離レベルの繰り返し読み取りを設定します。

4. システムの現在の分離レベルを設定する

グローバルトランザクション分離レベルを繰り返し読み取りに設定します。

オラクル

Oracle データベースは、READ COMMITTED と SERIALIZABLE の 2 つのトランザクション分離レベルをサポートしています。

デフォルトのシステムトランザクション分離レベルはREAD COMMITTEDで、これはコミットされた読み取りを意味します。

1. システムのデフォルトのトランザクション分離レベル(現在のセッション分離レベルでもある)を確認します。

--まずトランザクションを作成する

宣言する
 トランスID Varchar2(100);
 始める
 trans_id := dbms_transaction.local_transaction_id( TRUE );
 終わり;

-- トランザクション分離レベルを確認する

s.sid、s.serial#を選択します。

  CASE BITAND(t.flag, POWER(2, 28))
    0 の場合は「コミット済みを読み取り」
    そうでなければ「シリアル化可能」
  END AS isolation_level
v$トランザクションtから
v$session s を t.addr = s.taddr かつ s.sid = sys_context('USERENV', 'SID') として結合します。

補足: SQL Server のロックとトランザクション分離レベル

分離レベル

分離レベルダーティリード繰り返し不可能な読み取りファントム例示する
コミットされていない読み取りはいはいはい他のトランザクションが更新された場合は、コミットされているかどうかに関係なくすぐに実行します。
コミットされた読み取り(デフォルトではコミットされた読み取り)いいえはいはい送信されたデータを読み取ります。他のトランザクションの更新がコミットされていない場合は、待機します
繰り返し読み取りいいえいいえはいクエリ中は他のトランザクションによる更新は許可されません
シリアル化可能いいえいいえいいえクエリ中は、他のトランザクションによる挿入や削除は許可されません。
リクエストモードあなた9 章バツ
意図の共有(IS)はいはいはいはいはいいいえ
シェアはいはいはいいいえいいえいいえ
アップデート (U)はいはいいいえいいえいいえいいえ
排除の意図(IX)はいいいえいいえはいいいえいいえ
意図を持ってのみ共有される(SIX)はいいいえいいえいいえいいえいいえ
独占(X)いいえいいえいいえいいえいいえいいえ

ロック

共有ロック: 共有読み取り (選択) の場合、テーブル内のデータに共有ロックがかけられたトランザクション (1 つ以上) がある場合 (ロックされたデータの量はロックの粒度によって異なります)、ロックされたデータは更新 (更新) できません。

排他ロック: 1 つしか存在できず、他のトランザクションはロックされたデータに対して共有ロックと排他ロックを取得できません (つまり、排他ロックは共有ロックと互換性がありません。詳細については、ロックの互換性を参照してください)。ここでは、ロックされたデータを特に重視します。

ロックと分離レベル

タイプ1

① READUNCOMMITTED: ロックは発行されない

② READCOMMITTED: 共有ロックを発行し、読み取りが完了するまで保持する

③ REPEATABLEREAD: 共有ロックを発行し、トランザクションの終了まで保持する

④ SERIALIZABLE: 共有ロックを発行し、トランザクションの終了まで保持する

タイプ2

① NOLOCK: ロックは発行されません。 READUNCOMMITTEDと同等

② HOLDLOCK: 共有ロックを発行し、トランザクション終了まで保持します。 SERIALIZABLEと同等

③ XLOCK: 排他ロックを発行し、トランザクションが終了するまで保持します。

④ UPDLOCK: 更新ロックを発行し、トランザクションが終了するまで保持します。 (更新ロック: 他のものをブロックせず、他のものがデータを読み取ることを可能にします (つまり、更新ロックは共有ロックと互換性があります)。ただし、データが最後に読み取られてから更新されていないことを保証します)

⑤ READPAST: 共有ロックを発行しますが、行のロックはスキップされるため、ブロックされません。適用条件: コミット読み取り分離レベル、行レベル ロック、SELECT ステートメント。

タイプ3

① ROWLOCK: 行レベルロック

② PAGLOCK: ページレベルロック

③ TABLOCK:テーブルロック

④ TABLOCKX: テーブル排他ロック

SELECT ステートメントで XLOCK を使用すると、読み取りが防止されるわけではありません。これは、SQL SERVER が読み取りコミット分離レベルで特別な最適化を行っており、行が変更されたかどうかをチェックし、変更されていない場合は XLOCK を無視するためです。これは、Read Committed 分離レベルでは実際に許容されるからです。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • MySQL プロジェクトでトランザクション分離レベルを選択する方法
  • MySql 学習ノートにおけるトランザクション分離レベルの詳細な説明
  • MySQLにおけるトランザクション分離レベルの実装原理の詳細な説明
  • MySql の 4 つのトランザクション分離レベルについて簡単に説明します。
  • トランザクション分離レベルのMySQLケース分析

<<:  Vant アップローダーは、画像をアップロードするためのドラッグ アンド ドロップ機能を実装します (カバーとして設定)

>>:  Tomcatはスレッドプールを使用してリモート同時リクエストを処理します。

推薦する

Elementはスクリプトを使用して新しいコンポーネントを自動的に構築します

目次背景element-ui の自動構築はどのように機能しますか?メイクファイル新しい.jsファイル...

iframe ページで js 関数を呼び出すには js を使用します

最近、私は毎日論文提案に取り組んでいます。自分のスキルを発揮して、再びWebをデザインしたくてうずう...

CentOS7 構成 Alibaba Cloud yum ソースメソッドコード

Centos yumフォルダを開くコマンドcd /etc/yum.repos.d/を入力します。 w...

JavaScriptページングコンポーネントの使い方の詳細な説明

ページネーションコンポーネントはWeb開発でよく使われるコンポーネントです。ページネーション機能を実...

HTML テーブル マークアップ チュートリアル (43): テーブル ヘッダーの VALIGN 属性

垂直方向では、ヘッダーの配置を上、中央、下に設定できます。基本的な構文構文Top は上、Middle...

IE6 フォントを定義できません: 13px サイズは無効です。IE6 は自動的に大きいフォント ソリューションを表示します。

数日前、Web ページのモジュールを調整していたとき、ページのフォント サイズを 13px に設定し...

win10にmysql 8.0.18-winx64をインストールする詳細な手順

1. まず公式ウェブサイトにアクセスしてMySQLインストールパッケージをダウンロードします参考: ...

Docker を使用してエンタープライズレベルのカスタムイメージを構築する方法

序文退社前に、ある依頼を受けました。基本イメージ規格の変更により、最新の Docker イメージ規格...

MySQL インデックスの長所と短所、およびインデックス作成のガイドライン

1. インデックスを作成する理由(メリット)インデックスを作成するとシステムのパフォーマンスが大幅に...

MySQLのバージョンアップ方法を超詳しく解説

目次1. はじめに2. データベースをバックアップする3. オリジナルのMysqlをアンインストール...

CSSスタイルで実現されるHTML背景色のグラデーション効果

エフェクトのスクリーンショット:実装コード:コードをコピーコードは次のとおりです。 <!DOC...

MySQL データベースのバックアップをスケジュールするいくつかの方法 (包括的)

目次1. データをバックアップするためのmysqldumpコマンド2. 一般的なmysqldump操...

CSS3を使用してヘッダーアニメーション効果を作成する

Netease Kanyouxi公式サイト(http://kanyouxi.163.com/)(棚...

IntelliJ IDEA に Docker プラグインをインストールする詳細な手順 (2018 バージョン)

目次1. 開発環境2. dockerプラグインをインストールする1. アイデアのインストール2. イ...

フレックスレイアウトにおけるflex-growとflex-shrinkの計算方法の詳しい説明

CSS のFlex(彈性布局)すると、Web ページのレイアウトを柔軟に制御できます。Flex Fl...