したがって、理論的には、トランザクションを使用するときにデータベースに情報を部分的に挿入することは可能です。たとえば、挿入が発生すると、突然電気が失われます。1 つのレコードが tableA に書き込まれ、tableB には書き込まれない場合はありますか?
2 に答える
3
トランザクション開始マニュアルで自己説明:
エラーが発生した場合、BEGIN TRANSACTION の後に行われたすべてのデータ変更をロールバックして、データをこの既知の一貫性のある状態に戻すことができます。
答えはノーです。不可能です。あなたのシナリオでは、ACID の動作により、TableA と TableB の挿入は両方とも同じトランザクションにありますか? アトミックの A を思い出してください。
于 2012-10-24T06:39:35.243 に答える
0
すべてのアクティビティは、実際のデータ ファイルではなく、最初にトランザクション ログに書き込まれるため、発生しません。停電の場合、SQL Server の起動時に、トランザクション ログを調べて、未完了のトランザクションをロールバックします (起動が遅いか、データベースがしばらく回復モードになります)。
データ ファイルは、そのメモリがダーティ ページとしてメモリ内で使用可能になる前に、一定期間後にライターによって書き込まれます。
于 2012-10-24T11:18:58.460 に答える