ホームページ > データベース > mysql チュートリアル > MySQL はネストされたトランザクションをサポートしていますか? それとも適切な代替手段はありますか?

MySQL はネストされたトランザクションをサポートしていますか? それとも適切な代替手段はありますか?

Patricia Arquette
リリース: 2024-11-27 20:51:17
オリジナル
1010 人が閲覧しました

Does MySQL Support Nested Transactions, or Is There a Suitable Alternative?

MySQL のネストされたトランザクション: 神話か現実?

人気のリレーショナル データベース管理システムである MySQL は、ネストされたトランザクションのサポートについて疑問を呈しています。このトピックを詳しく調べて真実を明らかにしましょう。

MySQL はネストされたトランザクションに対応できますか?

いいえ、MySQL はネストされたトランザクションを明示的にサポートしません。他の特定のデータベース システムとは異なり、MySQL トランザクションは他のトランザクション内に埋め込むことができないトップレベルの作業単位です。

代替: SAVEPOINTS の導入

ネストされたトランザクションは埋め込むことができない場合があります。 MySQL で広く使用されているストレージ エンジンである InnoDB は直接サポートされるため、SAVEPOINTS と呼ばれるメカニズムを導入しています。 SAVEPOINTS はトランザクション内のチェックポイントとして機能し、セーブポイントのポイント以降に行われた変更を選択的にロールバックできます。

SAVEPOINTS を使用した実装

次のコード スニペットを考えてみましょう。

CREATE TABLE t_test (id INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;

START TRANSACTION;

INSERT
INTO    t_test
VALUES  (1);

SELECT  *
FROM    t_test;

 id
---
  1

SAVEPOINT tran2;

INSERT
INTO    t_test
VALUES  (2);

SELECT  *
FROM    t_test;

 id
---
  1
  2

ROLLBACK TO tran2;

SELECT  *
FROM    t_test;

 id
---
  1

ROLLBACK;

SELECT  *
FROM    t_test;

 id
---
ログイン後にコピー

この例では、新しいテーブル t_test が作成され、トランザクションが開始されます。レコードが挿入され、テーブルの現在の状態が表示されます。次に、tran2 という名前の SAVEPOINT が作成され、変更を選択的にロールバックできるトランザクション内のポイントがマークされます。別のレコードが挿入されますが、トランザクションをコミットする代わりに ROLLBACK TO tran2 が実行され、セーブポイント以降に行われた変更が元に戻されます。最後に、トランザクションはロールバックされ、テーブルが初期状態に復元されます。

MySQL は、SAVEPOINTS を通じて、ネイティブのネストされたトランザクション サポートの欠如に対する回避策を提供し、開発者が複雑なデータベース インタラクションを効果的に管理できるようにします。

以上がMySQL はネストされたトランザクションをサポートしていますか? それとも適切な代替手段はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート