サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 73 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

Oracleではどんな場合にCOMMITが必要?

tin
tin
2023-05-30 / 0 コメント / 2 いいね! / 1,540 読み / 604 文字

背景

今日、OracleでSQL文を使用してDELETEとUPDATEコマンドを実行しました。ローカルデータベースでは成功したように見えましたが、上司が確認したところ、データベースが削除または更新されていないとのことでした。これはなぜ起こるのでしょうか?

実際の原因は、コマンドを実行した後にCOMMITを行っていなかったためです。したがって、更新内容はメモリに保存されるだけであり、データベースにはコミットされず、他のセッションで見ることはできません。他のセッションでは、更新前のデータが表示されます。ユーザーがセッションを終了すると、Oracleは自動的にコミットを実行します。

SQL言語の分類

SQL言語は以下の5つの主要なカテゴリに分けられます:

  • DDL(データ定義言語)- Create、Alter、Dropなどの文は自動的にコミットされ、COMMITの必要はありません。

  • DQL(データクエリ言語)- SELECTクエリ文にはコミットの問題はありません。

  • DML(データ操作言語)- Insert、Update、Deleteなどの文はコミットが必要です

  • DTL(トランザクション制御言語)- COMMIT、ROLLBACKなどのトランザクションのコミットやロールバックを行う文です。

  • DCL(データ制御言語)- Grant、Revokeなどの文は権限の付与や取り消しを行います。

COMMITの自動実施

  • DML文を実行した後にCOMMITせずにDDL文を実行すると、未コミットのデータも自動的にコミットされます。

  • ユーザーがセッションを終了すると、Oracleは自動的にコミットを実行します。

  • 自動コミットを有効にすると、DML操作後に手動でコミットする必要はありません:SET AUTOCOMMIT ON;

2
  • 2

コメント欄