![](http://gadget-info.com/img/difference-between/567/difference-between-commit.jpg)
SQLのCommit文とROLLBACK文の違いを以下の比較表を使って説明しましょう。
比較表
比較基準 | コミット | ロールバック |
---|---|---|
基本 | COMMITは、現在のトランザクションによって行われた変更を検証します。 | ROLLBACKは、現在のトランザクションによって行われた変更を消去します。 |
効果 | COMMIT文の実行後、トランザクションをROLLBACKにすることはできません。 | ROLLBACKが実行されると、データベースは以前の状態、つまりトランザクションの最初のステートメントの実行前に到達します。 |
発生 | トランザクションが正常に実行されると、COMMITが発生します。 | ROLLBACKは、トランザクションが実行の途中で中止されたときに発生します。 |
構文 | コミット; | ROLLBACK; |
COMMITの定義
COMMITはSQLステートメントで、トランザクションが正常に完了したことを知らせます。 トランザクションが中断せずに実行を完了するたびに、トランザクションによってデータベースに加えられた変更は永続的になります。 つまり、データベースは、最初のステートメントの実行前にトランザクションが行われていた以前の状態を取り戻すことができません。
COMMIT文の構文は次のとおりです。
コミット;
トランザクションの最後のステートメントが終了すると、トランザクションは部分的にコミットされます。 次に、 リカバリプロトコルは 、システム障害が発生してもデータベースを変更できないようにして、変更を永続的なものにします。 これがチェックされるとすぐに、トランザクションのコミットポイントに達し、最後にトランザクションはコミット状態に入ります。 トランザクションがコミット状態になると、ロールバックできなくなり、新しいトランザクションが開始されます。
ROLLBACKの定義
COMMITと同様に、 ROLLBACKもSQLステートメントであり、トランザクションが正常に完了していない ことを示します。 したがって、トランザクションによって行われた変更を元に戻すために、トランザクションは中止されます。 ROLLBACKの実行後、現在のトランザクションによって行われた変更は保持されません。
ROLLBACKの構文は次のとおりです。
ROLLBACK;
トランザクションの実行中にエラーが発生した場合、トランザクションROLLBACKが必要になります。 エラーには、システム障害、停電、トランザクションステートメントのエラー、システムクラッシュなどがあります。 停電やシステムクラッシュの場合、システムが再び再起動したときにROLLBACKが発生します。 ROLLBACKは、COMMITがまだ実行されていない場合にのみ発生します。
SQLにおけるCOMMITとROLLBACKの主な違い
- SQLのCOMMIT文とROLLBACK文の主な違いは、COMMIT文を実行すると、現在のトランザクションによるすべての変更が永続的になることです。 一方、ROLLBACKを実行すると、現在のトランザクションによって行われたすべての変更が消去されます。
- COMMITステートメントが実行されると、トランザクションによる変更はROLLBACKになることはできません。 ただし、ROLLBACK文が実行されると、データベースは以前の状態になります。
- トランザクションステートメントが正常に実行されると、COMMITが実行されます。 ただし、ROLLBACKはトランザクションが正常に実行されなかったときに実行されます。
結論:
トランザクションによる変更がデータベースに永続的に保存されるようにするには、トランザクションが正常に完了した後にCOMMITを使用します。 実行中にトランザクションにエラーが発生した場合は、トランザクションによって行われた変更を元に戻すために、ROLLBACKが使用されます。