ホームページ >データベース >mysql チュートリアル >MySQL トランザクション - ROLLBACK、COMMIT の使用法の詳細な説明
ロールバックを使用する
トランザクション処理とは何かを理解したところで、トランザクション処理の管理に関連する問題について説明します。
トランザクション処理を管理するための鍵は、SQL ステートメントのグループを論理的なチャンクに分割し、データをいつロールバックする必要があるのか、いつロールバックすべきでないのかを明確に示すことです。
MySQL は、次のステートメントを使用してトランザクションの開始を識別します:
入力:
start transaction
MySQL の ROLLBACK コマンドは、MySQL ステートメントをロールバック (元に戻す) に使用されます。次のステートメントを参照してください:
入力:
select * from ordertotals; start transaction; delete from ordertotals; select * from ordertotals; rollback; select * from ordertotals;
分析: この例 まず、ordertotal テーブルの内容を表示します。まず SELECT を実行して、テーブルが空ではないことを示します。次に、トランザクションを開始し、DELETE ステートメントを使用して合計の順序ですべての行を削除します。別の SELECT ステートメントは、ordertotals が実際に空であることを検証します。このとき、ROLLBACK ステートメントは START TRANSACTION 以降のすべてのステートメントをロールバックするために使用され、最後の SELECT ステートメントはテーブルが空ではないことを示します。
明らかに、ROLLBACK はトランザクション内でのみ使用できます (START TRANSACTION コマンドの実行後)。
どのステートメントをロールバックできますか? トランザクションは、INSERT、UPDATE、および DELETE ステートメントを管理するために使用されます。 SELECT ステートメントをロールバックすることはできません。 (これを行う意味もほとんどありません。) CREATE または DROP 操作をロールバックすることはできません。これら 2 つのステートメントはトランザクション ブロック内で使用できますが、ロールバックを実行しても元に戻されません。
COMMITを使用します
一般的なMySQLステートメントは、データベーステーブルに対して直接実行され、書き込まれます。これはいわゆる暗黙的なコミットです。つまり、コミット (書き込みまたは保存) 操作が自動的に実行されます。ただし、トランザクション ブロック内では、コミットは暗黙的に発生しません。明示的にコミットするには、次のように COMMIT ステートメントを使用します。
入力:
start transaction; delete from orderitems where order_num = 20010; delete from orders where order_num = 20010; commit;
分析: この例では、注文 20010 がシステムから完全に削除されます。これには、orders と orderItems という 2 つのデータベース テーブルの更新が含まれるため、注文が部分的に削除されないようにトランザクション ブロックが使用されます。最後の COMMIT ステートメントは、エラーなしで変更を書き出すだけです。最初の DELETE が成功しても 2 番目の DELETE が失敗した場合、DELETE はコミットされません (実際には自動的に取り消されます)。
暗黙的なトランザクションの終了 COMMIT または ROLLBACK ステートメントが実行されると、トランザクションは自動的に終了します (将来の変更は暗黙的にコミットされます)。
【関連おすすめ】
3. MySQL UPDATEトリガー(更新)とトリガーの詳細な分析
4. MySQLの削除トリガー(delete)の使い方の説明
5.以上がMySQL トランザクション - ROLLBACK、COMMIT の使用法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。