TCLトランザクション制御言語

もちろん、私を含め、多くの人がmsqlの問題をよく理解していないので、今日はmysqlの問題を調査し、その経験を次のように記録します。

まず、トランザクションの概念、トランザクションとは何ですか?

トランザクション:トランザクションは、単一のユニット内の1つ以上のSQLステートメントで構成されます。このユニットでは、各mysqlステートメントは相互に依存しています。単一ユニット全体を分割できない全体として、ユニット内のSQLステートメントが失敗またはエラーを生成した場合、ユニット全体がロールバックされ、影響を受けるデータはトランザクションが開始される前の状態に戻ります。 unit sqlステートメントが正常に実行されると、トランザクションはスムーズに実行されます。

トランザクションのACIDプロパティ:

1.アトミシティ:

原子性とは、トランザクションが分割できない作業単位であり、トランザクション内の操作がすべて発生するか、発生しないことを意味します。

2.一貫性:

トランザクションは、データベースをある一貫性のある状態から別の一貫性のある状態に変換する必要があります。

3.分離:

トランザクションの分離とは、トランザクションの実行が他のトランザクションによって妨害されないことを意味します。つまり、トランザクションによって使用される内部操作とデータは他の同時トランザクションから分離され、同時に実行される各トランザクションは互いに干渉できません。

4、持久性:

永続性とは、トランザクションがコミットされると、データベース内のデータへの変更が永続的であり、その後の他の操作やデータベースの障害がトランザクションに影響を与えないことを意味します。

トランザクションの作成:

暗黙のトランザクション:トランザクションには明確な開始マークと終了マークがありません

挿入、更新、削除など

明示的なトランザクション:トランザクションには明らかな開始マークと終了マークがあります

前提条件:最初に自動送信機能を無効に設定する必要があります

set autocommit = 0;(現在の場合にのみ有効です。次回使用するときにリセットする必要があります)

1、自動コミットを設定= 0

トランザクションの開始;オプション

2.トランザクションにSQLステートメントを記述します(選択、挿入、更新、削除)

ステートメント1;

ステートメント2;

...。

3.ステップ3:

トランザクションを終了します

commit;トランザクションをコミットします

ロールバック;トランザクションをロールバックします

セーブポイント;セーブノード

実証する例を挙げてください。

savepoint的使用

set autocommit=0; #关闭自动提交

start transaction;#开始事务

delete from account where id=25;#具体操作

savepoint a;#保存节点

delete from account where id=28;#事务的具体操作

rollback to a;#回滚到节点a

个人理解这个更像是快照或者锚点的意思,在需要的位置保存一个节点,然后需要回滚时,随时都可以回到节点保存时的状态。

さらに、同時に実行される複数のトランザクションの場合、これらのトランザクションがデータベース内の同じデータにアクセスするときに、必要な分離メカニズムが採用されていないと、さまざまな同時実行の問題が発生します。

1.ダーティ読み取り:2つのトランザクションT1とT2の場合、T1T2によって更新さたがまだコミットされていないフィールドを読み取った後、T2がロールバックすると、T1によって読み取られたコンテンツは一時的で無効になります。

2.繰り返し不可の読み取り:2つのトランザクションT1、T2、T1がフィールドを読み取り、次にT2がフィールドを更新し、次にT1が同じフィールドを再度読み取ります。値が異なります。

3.ファントム読み取り:2つのトランザクションの場合、T1、T2、およびT1がテーブルからフィールドを読み取り、T2テーブルに新しい行挿入します。その後、T1が同じテーブルを再度読み取ると、次のようになります。さらに数行。

データベーストランザクションの分離:

データベースシステムには、さまざまなトランザクションを分離して同時に実行する機能が必要です。これにより、トランザクションが相互に影響を与えず、さまざまな同時実行の問題を回避できます。

トランザクションと他のトランザクションの間の分離の程度は、分離レベルと呼ばれます。データベースはさまざまなトランザクション分離レベルを指定し、異なる分離レベルは異なるレベルの干渉に対応します。分離レベルが高いほど、データの整合性は向上しますが、同時実行性は弱くなります。

mysqlデータベースは4つのトランザクション分離レベルをサポートします。mysqlのデフォルトのトランザクション分離レベルは繰り返し可能です。

1.コミットされていない読み取り(ダーティ読み取り、ファントム読み取り、繰り返し不可の読み取り)

2.読み取りが送信されました(ダーティ読み取りを解決します)

3.繰り返し可能な読み取り(ダーティ読み取りと繰り返し不可能な読み取りを解決しますが、ファントム読み取りは解決しません)

4.シリアル化(すべての問題を解決)、ただしパフォーマンスは比較的低い

 したがって、デフォルトの分離レベル(繰り返し可能な読み取り)を選択します。

 

 

おすすめ

転載: blog.csdn.net/weixin_42575020/article/details/113526651