0

こことグーグルで複数の回答を見て、トランザクションのロールバックは最後のコマンドのロールバックのみを意味し、すべてのコマンドを意味することも読みました。(文書化も参照もされていません)

私がする必要があるのは、テーブルAに挿入/更新し、Aの最後のIDを取得し、そのIDをBに挿入し、Bの最後のIDを取得し、Cに挿入するなどのストアドプロシージャを作成することです。

トランザクションを開始し、何かが失敗した場合はすべてを元の状態に戻すために、トランザクション内のすべてのコマンドをコミットまたはロールバックする方法を知りたいです。

IFエラーとlast_idを含むSQLコードは評価されます。これは、最後のIDを取得するためのさまざまな方法をたくさん見たものであり、どちらが優れているかわからないためです。

ちなみに、すべてのテーブルはInnoDBです

敬具、

4

2 に答える 2

1

START TRANSACTION、、COMMITおよびROLLBACK構文で説明されているように:

これらのステートメントは、トランザクションの使用を制御します。

[ deletia ]

  • ROLLBACK現在のトランザクションをロールバックし、その変更をキャンセルします。
于 2012-11-05T16:28:28.060 に答える
1

トランザクションの場合BEGIN、それまで何も適用されませんCOMMIT。接続を切断したり、を発行したりすることROLLBACKは、決してコミットしないことと同じです。

もちろん、これはあなたがautocommit設定したことを前提としていますが、これは通常の場合です。

コマンドをトランザクションとしてラップする場合は、個々のコマンドをロールバックできます。

詳細については、ドキュメントを参照してください。

MyISAMおよびその他のエンジンは、InnoDBがサポートしているトランザクションをサポートしていないことに注意してください。さらに、、、、およびステートメントのみをロールINSERTバックできます。スキーマの変更など、他のものはそうではありません。UPDATEDELETEREPLACE

于 2012-11-05T16:28:38.950 に答える