私が知る限り、SQL ステートメントを発行すると、データベース (MySQL では確かに) のデフォルトの動作は自動コミットです。
しかし、構造は通常次のようになります。
String sqlInsertOrUpdateStatement = "....";
sqlStatement.execute(sqlInsertOrUpdateStatement);
//rest of code
現在、これexecute
はブロッキング関数であり、返されたときに、データが保存されたかどうかがわかります (実行の結果による)。
しかし、私が理解できないのは次のことです。
すべての DB 実装は、最下位レベルのファイルを使用します。たとえば、INSERT
基本的には、ファイルへの書き込み操作を深く掘り下げています。しかし、ファイルに書き込むとき、内容は実際にはすぐにはフラッシュされないと思います。OSが決定すると、それらはフラッシュされます。アプリケーション コード (C ライブラリなど) がフラッシュを発行しても、OS はすぐにデータをフラッシュします。
では、データベースはどのようにして永続性を保証できるのでしょうか。私が見落としている/誤解しているファイルI/OとOSに基本的なものはありますか?