2

2つのストアドプロシージャA、Bがあり、どちらもトランザクションブロックにあります。問題は、AがBを呼び出すことです。したがって、再帰的/ネストされたトランザクションがあります。問題があるかわかりませんか?Aに電話するとどうなりますか?

「MySQLストアドプロシージャプログラミング」から引用:

START TRANSACTION新しいトランザクションの開始を意味します。既存のトランザクションがすでに進行中の場合START TRANSACTIONは、暗黙的にを発行しCOMMITます。を発行するSTART TRANSACTIONと、autocommitプロパティ(次のセクションで説明)は、トランザクションが終了するまで、効果的かつ暗黙的に0に設定されます。コードを読んだり保守したりする人には暗黙的ではない可能性があるSTART TRANSACTIONため、ステートメントの前に既存のトランザクションを明示的にコミットまたはロールバックすることをお勧めします。COMMIT

4

3 に答える 3

2

両方のプロシージャが同じリソースにロックを設定/使用すると、デッドロックが発生します。必要なBテーブル/行/フィールドのロックを保持しています。つまり、独自のロックを取得できません。そのため、 DBMSがタイムアウトしてロールバックするまで、ロックの取得を待機します。AAA

于 2011-06-01T14:14:51.977 に答える
0

B が A も呼び出さない限り、再帰的な状況は発生せず、入れ子になったトランザクションになります。これで問題ありません。

于 2011-06-01T14:09:33.037 に答える