酸(原子性、一貫性、分離、耐久性)特性を備えたMySQLのトランザクションを実装するには、 START TRANSACTION
、 COMMIT
、およびROLLBACK
ステートメントを使用する必要があります。これらのステートメントは、トランザクションのライフサイクルを管理します。これが故障です:
START TRANSACTION
(またはBEGIN
):このステートメントはトランザクションを開始します。その後のすべてのSQLステートメントは、明示的にコミットまたはロールバックされるまで、このトランザクションの一部です。COMMIT
:このステートメントは、データベースへのトランザクション内で行われたすべての変更を永久に保存します。一度コミットされると、変更は耐久性があり、他の接続に見えるようになります。ROLLBACK
:このステートメントはSTART TRANSACTION
ステートメント以降、トランザクション内で行われたすべての変更を元に戻します。取引が始まる前に、データベースはその状態に戻ります。これが簡単な例です:
<code class="sql">START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE account_id = 1; UPDATE accounts SET balance = balance 100 WHERE account_id = 2; COMMIT; -- Or ROLLBACK; if an error occurs</code>
この例は、アカウント1からアカウント2に100ユニットを転送します。 COMMIT
により、両方の更新が原子的に発生することが保証されます。どちらも成功するか、どちらも成功しません。 COMMIT
前にエラーが発生した場合、 ROLLBACK
使用して部分的な更新を防ぐことができます。 MySQLのストレージエンジン(INNODBなど)は、舞台裏の酸性特性を処理します。明示的なCOMMIT
がなければ、トランザクションは開いたままですが、変更されるまで他の接続に変更は見えません。 AUTOCOMMIT=0
を使用すると、すべてのステートメントの後に自動コミットを防ぎます。
いくつかの一般的な間違いは、MySQLトランザクションの有効性を損なう可能性があります。避けるべき重要な落とし穴は次のとおりです。
COMMIT
またはROLLBACK
を忘れる:トランザクションを無期限に開いたままにすると、リソースのロックと矛盾につながる可能性があります。常に成功したトランザクションとROLLBACK
エラーに遭遇したトランザクションを明示的にCOMMIT
。TRY...CATCH
て例外をキャッチし、エラーが完全なトランザクションを防ぐとROLLBACK
発生するようにします。READ UNCOMMITTED
、 READ COMMITTED
、 REPEATABLE READ
、 SERIALIZABLE
)。不適切なレベルを選択すると、汚れた読み取り、繰り返しのない読み取り、Phantomの読み取りなどの問題が発生する可能性があります。 REPEATABLE READ
は、多くの場合、パフォーマンスとデータの一貫性のバランスが良好です。分離レベルを選択するときは、アプリケーションの特定のニーズを考慮してください。Transactionsは、MySQLデータベースのデータの一貫性と整合性を維持するために重要です。彼らは以下を保証します:
トランザクションを適切に使用し、分離レベルを慎重に管理することにより、データの信頼性と完全性を大幅に向上させます。
はい、プロセス中にエラーが発生した場合、MySQLのトランザクションをロールバックできます。 ROLLBACK
ステートメントは、この目的に使用されます。 START TRANSACTION
ステートメント以来、トランザクション内で行われたすべての変更を元に戻し、データベースを以前の状態に戻します。
通常、プログラミングコンテキスト内で機能する方法は次のとおりです。
<code class="sql">START TRANSACTION; -- ... your SQL statements ... IF ERROR THEN ROLLBACK; ELSE COMMIT; END IF;</code>
このコードスニペットは、基本的なエラー処理メカニズムを示しています。 SQLステートメントの実行中にエラーが発生した場合、 ROLLBACK
ステートメントはデータベースに永続的に変更されないことを保証します。 ROLLBACK
がなければ、部分的な更新により、データベースは一貫性のない状態に残る可能性があります。データの整合性を保証するために、アプリケーションロジック内でエラーを適切に処理することを忘れないでください。適切なエラー処理は、デバッグと監視の目的でエラーを記録する必要があります。
以上が酸性特性を使用してMySQLでトランザクションを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。