• ベストアンサー

ロールバック

早速ご教示ください。 DELETE FROM テーブル名 この構文を用いて、テーブルを削除したいと考えております。 参考書で調べたところ、TURNCATE TABLE文だとロールバックできないが、処理が高速と記述してあります。 DELETE FROM TABLE文だとロールバックできない状態での削除は注意してくださいとあります。 つまりは、DELETE FROM TABLE文だとロールバックできる状態での削除なら削除前に戻せると言うことなのでしょうか? (1)ロールバックってなんですか? (2)ロールバックできる状態、できない状態。その両方の状態をご教示く ださい。  またロールバックはどのように行うのでしょうか? 以上、ご教示の程宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

(1)ロールバックとは、文字通り「元に戻す」ことです。 削除なら削除前の状態に戻すことをいいます。 つまり、ある特定の条件下では、削除しても元に戻せるということです。 参考書はOracleに代表される一般的なデータベースの参考書であると思われますが、SQL Serverは少しそれには当てはまらない動きをします。 通常のデータベースとは違うのは、TRUNCATEしてもロールバックできるという点です。 (2)ロールバックできる状態にするには、SQL Serverの場合はトランザクションモードにする必要があります。 細かい説明まではまだ必要ないでしょうから、ざっくり説明しますと、 トランザクションモードとは、「一連の処理をワンセットとして取り扱うモード」というようなイメージです。 トランザクションモードに入ってから、モードを終わらせるまでの間に実行した処理はまとめて確定(COMMIT)するか、まとめて取消(ROLLBACK)するかのどちらかとなります。 方法は「BEGIN TRANSACTION(またはBEGIN TRAN)」を実行するだけです。それでそのセッションはトランザクションモードになります。 終わらせるには「COMMIT TRAN(確定)」または「ROLLBACK TRAN(取消)」のいずれかを実行します。 (SQL Server Management Studioでクエリを打ち込む画面を開きますよね?SSMSでは、その1画面単位で1セッションとなります) 便利なようにみえますが、トランザクションモードの間はいわば処理は保留状態ということになりますので、更新などを掛けるとそのレコードには他のユーザは(トランザクションモードが終わるまでは)アクセスできなくなります。使う場合は、そういうモードだと思って使ってください。 ロールバックの例 BEGIN TRAN GO DELETE FROM TABLEX <=まちがえて全件削除 GO ROLLBACK TRAN GO

runathicku
質問者

お礼

ありがとうございます! ものすごく解りやすい説明です。 早速実行してみます!

その他の回答 (1)

  • wolf03
  • ベストアンサー率22% (241/1086)
回答No.1

ロールバックとは前回確定してからの変更を前回確定時まで戻すことです。 ロールバックできない状態はロールバック領域が足りないなどロールバック用の情報が欠けてしまっている状態です。 もしくは、頻繁に更新がされていて他の処理に影響を与えるような場合です。 まず用語を勉強する方がよいかと思いますが。

関連するQ&A