ホームページ  >  記事  >  データベース  >  mysqlのトランザクション処理とは何ですか

mysqlのトランザクション処理とは何ですか

青灯夜游
青灯夜游オリジナル
2022-11-11 17:32:102467ブラウズ

mysql では、トランザクション処理は、データベースに不完全な操作結果が含まれないようにバッチで実行する必要がある MySQL 操作を管理するために使用されるメカニズムです。トランザクション処理は、データベースの整合性を維持するために使用できます。 MySQL 操作のバッチは途中で停止せず、完全に実行されるか、まったく実行されないことが保証されます。

mysqlのトランザクション処理とは何ですか

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

トランザクション処理

トランザクション処理 は、データベースの整合性を維持するために使用できます。 MySQL 操作のバッチが完全に実行されるか、まったく実行されないかのどちらかです。

たとえば、人事管理システムでは、個人を削除するには、その個人の基本情報だけでなく、メールボックスや記事など、その個人に関連する情報も削除する必要があります。このように、これらのデータベースの操作ステートメントはトランザクションを構成します。

トランザクション処理は、データベースに不完全な操作結果が含まれないようにするためにバッチで実行する必要がある MySQL 操作を管理するために使用されるメカニズムです。 トランザクション処理を使用すると、一連の操作が途中で停止せず、全体として実行されるか、または (明示的に指示されない限り) まったく実行されないことを保証できます。エラーが発生しない場合、ステートメントのセット全体がデータベース テーブルにコミット (書き込み) されます。エラーが発生した場合は、ロールバック (元に戻す) してデータベースを既知の安全な状態に復元します。

一般に、トランザクションは 4 つの条件 (

ACID) を満たす必要があります。 Atomicity(Aomicity,または不可分性)、一貫性(C一貫性)、孤立性( I孤立性、独立性とも呼ばれます)、持続性(D耐久性)。

  • 原子性: トランザクション内のすべての操作は完了するか完了しないかのいずれかであり、中間リンクで終了することはありません。トランザクションの実行中にエラーが発生した場合は、トランザクションがまったく実行されなかったかのように、トランザクションが開始される前の状態にロールバックされます。

  • 一貫性: データベースの整合性は、トランザクションの開始前およびトランザクションの終了後に破壊されません。これは、書き込まれるデータが、データの精度や連結など、事前に設定されたすべてのルールに完全に準拠する必要があり、後続のデータベースが所定の作業を自発的に完了できることを意味します。

  • 分離: データベースでは、複数の同時トランザクションが同時にデータの読み取り、書き込み、変更を行うことができます。分離すると、次の理由により複数のトランザクションが同時に実行されるのを防ぐことができます。クロス実行はデータの不整合を引き起こします。トランザクション分離は、非コミット読み取り、コミット読み取り、反復読み取り、シリアル化可能など、さまざまなレベルに分かれています。

  • 永続性: トランザクション完了後のデータへの変更は永続的であり、システムに障害が発生した場合でも失われることはありません。

#1.1 キーワードトランザクションおよびトランザクション処理を使用する場合、繰り返し現れるキーワードがいくつかあります。トランザクション処理について知っておく必要がある用語をいくつか紹介します:

    トランザクション:
  • は一連の SQL ステートメントを指します;
  • ロールバック ( ロールバック):
  • は、指定された SQL ステートメントを元に戻すプロセスを指します ;
  • 送信 (コミット):
  • は、保存されていない SQL ステートメントの結果をデータベースに書き込むことを指しますtable;
  • セーブポイント:
  • は、ロールバック (トランザクション全体のロールバックとは異なります) を発行できる、トランザクション内に設定された一時的なプレースホルダー (プレースホルダー) を指します。
#1.2 トランザクション制御ステートメント

トランザクション処理を管理する鍵は、SQL ステートメント グループを論理ブロックに分解することです

そして、データをいつロールバックすべきか、いつロールバックすべきでないのかを明確に指定します。

##1.2.1 START TRANSACTION トランザクションの開始

MySQL は、次のステートメントを使用して

トランザクションの開始を識別します。
START  TRANSACTION

1.2.2 COMMIT

一般的な MySQL ステートメントは、データベース テーブルに対して直接実行され、書き込まれます。これはいわゆる implicit commit (暗黙的なコミット)、つまり送信 (書き込みまたは保存) 操作が自動的に実行されます
ただし、トランザクション ブロックでは、コミットは暗黙的に実行されません。明示的にコミットするには、COMMIT ステートメント を使用します。COMMIT はトランザクションをコミットし、データベースに加えられたすべての変更を永続的にします;以下に示す:

START TRANSACTION  
DELETE FROM orderitems WHERE order_num = 20010;
DELETE FROM orders WHERE order_num = 20010;
COMMIT;

この例では、注文 20010 がシステムから完全に削除されます。これには、orders と orderItems という 2 つのデータベース テーブルの更新が含まれるため、注文が部分的に削除されないようにトランザクション ブロックが使用されます。 最後の COMMIT ステートメントは、エラーが発生しない場合にのみ変更を書き込みます。最初の DELETE が成功しても 2 番目の DELETE が失敗した場合、DELETE はコミットされません (実際には自動的に取り消されます)。

#1.2.3 ROLLBACK

MySQL の

ROLLBACK コマンドは、MySQL ステートメントをロールバック (元に戻す) するために使用されます 、次のように:

SELECT * FROM orderitems;
START TRANSACTION        -- 事务开始
DELETE FROM orderitems;
SELECT * FROM orderitems;
ROLLBACK;
SELECT * FROM orderitems;
上の例は、ordertotals テーブルの内容を表示することから始まります。まず SELECT を実行して、テーブルが空でないことを示します。次に、


トランザクション処理 , を開始し、DELETE ステートメントを使用して ordertotals 内のすべての行を削除します。 別の SELECT ステートメントは、ordertotals が実際に空であることを検証します。 この時点で、ROLLBACK ステートメントを使用して、START TRANSACTION 以降のすべてのステートメントをロールバックします。最後の SELECT ステートメントは、テーブルが空ではないことを示します。
明らかに、ROLLBACK はトランザクション内 (START TRANSACTION コマンドの実行後) でのみ使用できます。

トランザクション処理は、INSERT、UPDATE、および DELETE ステートメントを管理するために使用されます。 SELECT ステートメントをロールバックすることはできません。 (これもあまり意味がありません。) CREATE または DROP 操作をロールバックすることはできません。これら 2 つのステートメントはトランザクション ブロック内で使用できますが、ロールバックを実行しても元に戻されません。

1.2.4 保持ポイント

単純な ROLLBACK および COMMIT ステートメントで、トランザクション全体の書き込みまたはキャンセルが可能です 。ただし、これは単純なトランザクションでのみ可能であり、より複雑なトランザクションでは部分的なコミットまたはロールバックが必要になる場合があります。

トランザクションの一部のロールバックをサポートするには、トランザクション ブロック内の適切な場所にプレースホルダーを配置する必要があります。こうすることで、ロールバックする必要がある場合に、プレースホルダーにフォールバックできます。

これらのプレースホルダーは保持ポイントと呼ばれます。 プレースホルダーを作成するには、次の SAVEPOINT ステートメント を使用できます。

SAVEPOINT delete1;

各保持ポイントには、それを識別する一意の名前が付いているため、ロールバック時に、MySQL どこにフォールバックするかを知っています。

次の操作は、指定された保持ポイントにフォールバックできます:

ROLLBACK TO delete1;

1.2.5 デフォルトの送信動作の変更

前述したように、デフォルトはMySQL の動作では、すべての変更が自動的にコミットされます。つまり、MySQL ステートメントを実行するたびに、ステートメントは実際にテーブルに対して実行され、変更はすぐに有効になります。変更を自動的にコミットしないように MySQL に指示するには、次のステートメントを使用する必要があります:

SET autocommit = 0;

autocommit フラグは、COMMIT ステートメントの有無に関係なく、変更を自動的にコミットするかどうかを決定します 。 autocommit を 0 (false) に設定すると、MySQL は (autocommit が true に設定されるまで) 変更を自動的にコミットしないよう指示します。

接続用のフラグ 特殊な自動コミット フラグは、サーバーではなく接続ごとにあります。

1.3 トランザクション処理メソッド

MYSQL のトランザクション処理には、主に 2 つのメソッドがあります。

BEGIN、ROLLBACK、COMMIT を使用して実装します

  • 1)
  • BEGIN
トランザクションを開始します

2) ROLLBACK

トランザクション ロールバック

3)COMMIT

トランザクションの確認

例:

START TRANSACTION; -- 开始事务
INSERT INTO runoob_transaction_test VALUE(5);
INSERT INTO runoob_transaction_test VALUE(6);
COMMIT; -- 提交事务

select * from runoob_transaction_test;

  • SET を直接使用して MySQL の自動送信モードを変更します:

SET AUTOCOMMIT=0 自動送信を無効にする

# SET AUTOCOMMIT=1 自動送信をオンにする

[関連する推奨事項:

mysql ビデオ チュートリアル ]

以上がmysqlのトランザクション処理とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。