• ベストアンサー

コミットとは何でしょうか?

hana432の回答

  • ベストアンサー
  • hana432
  • ベストアンサー率37% (6/16)
回答No.3

INSERT,UPDATE,DELETE等を発行するだけでは、テーブルへの書込みが確定していません。 COMMIT(INSERT等の処理後の結果を確定)またはROLLBACK(INSERT等の処理前の状態に戻す)を発行してやっとテーブルへの書込みが終了します。 例えば、乱暴ですが下記のテーブルがあったとします。 (1)商品テーブル  カラム:商品名・・・商品名を格納      在庫数・・・在庫品が何個残っているかを格納  データ:商品名  在庫数      -----------------      A品     10 (2)売上テーブル  カラム:商品名・・・商品名を格納      売上数・・・売り上げた個数を格納  データ:商品名  売上数      -----------------      A品      0 で、ある日、A品が5個売れたとします。データとしては、商品テーブルのA品を5個を減らし、売上テーブルのA品を5個増やしたいとします。  商品テーブルデータ:商品名  在庫数       商品名  在庫数            ----------------       ----------------            A品     10  処理後  A品      5                      →→→           となるようにしたい。  売上テーブルデータ:商品名  売上数       商品名  売上数            ----------------       ----------------            A品      0       A品      5 処理(SQL)としては、下記のような感じになると思うのですが、   UPDATE 商品テーブル SET 個数 - 5 WHERE 商品名 = 'A品'; -- (1)   UPDATE 売上テーブル SET 個数 + 5 WHERE 商品名 = 'A品'; -- (2) で、(1)の処理は成功したけど、(2)の処理が何らかの原因で失敗したとします。 もし、UPDATEした結果が即テーブルに確定されるんだったら、データは下記のようになってしまいます。  商品テーブルデータ:商品名  在庫数       商品名  在庫数            ----------------       ----------------            A品     10  処理後  A品      5                      →→→            売上テーブルデータ:商品名  売上数       商品名  売上数            ----------------       ----------------            A品      0       A品      0 A品は5個売れたので在庫数は5個減ったのに、売上数には計上されていない。一体、A品の5個はどこに行ってしまったの?!ということになってしまいます。 これが「整合性」というやつです。 それで、上記処理の(1)と(2)が両方成功して初めて、テーブルを確定しないとデータが変になってしまいます。 commitは、そのために必要です。 逆に、上記処理の(1)が成功したけど(2)は失敗しちゃった時は、rollbackをしてやります。すると、(1)の処理を行う前のデータに戻って確定します。 上の説明を加味した処理(SQL)はこんな感じです。 begin   UPDATE 商品テーブル SET 個数 - 5 WHERE 商品名 = 'A品'; -- (1)   UPDATE 売上テーブル SET 個数 + 5 WHERE 商品名 = 'A品'; -- (2) commit; -- ↓(1),(2)の処理でなんかエラーが起こると即、ここに飛んでくる exception when others rollback; end; 補足:ROLLBACKはどのデータ時点に戻る? COMMIT,ROLLBACKが発行されてから、最初にINSERT,UPDATE,DELETEが発行された時点に戻ります。 例1) begin UPDATE 商品テーブル SET 個数 - 5 WHERE 商品名 = 'A品'; -- (1) UPDATE 売上テーブル SET 個数 + 5 WHERE 商品名 = 'A品'; -- (2) commit; -- ↓(1),(2)の処理でなんかエラーが起こると即、ここに飛んでくる exception when others rollback; end; この場合、(2)処理中に障害が発生すると、(1)のUPDATEが行われる前のデータ状態に戻ります。 例2) begin UPDATE 商品テーブル SET 個数 - 5 WHERE 商品名 = 'A品'; -- (1) commit; UPDATE 売上テーブル SET 個数 + 5 WHERE 商品名 = 'A品'; -- (2) commit; -- ↓(1),(2)の処理でなんかエラーが起こると即、ここに飛んでくる exception when others rollback; の場合だと、(1)の処理後にcommitが発行されているので(1)のデータは確定している為、(2)のUPDATEが行われる前に戻ります。 commit,rollbackのタイミングは意外にも重要です。 長いばっかりで分かりにくかったかもしれませんが、参考になれば幸いです。頑張ってくださいね。 ※表がずれて見にくいので、一旦メモ帳かなんかに貼り付けて読んでください。すみません。

saruno
質問者

お礼

非常に分りやすかったです。 どうもありがとうございました。

関連するQ&A

  • コミットの意味は?

    『その事業に,全力でコミットします。』こんな使い方は出来ますか? 言いたい事は,「その事業に,全力で貢献します。」こんな意味が出ればいいのですが日本語として大丈夫でしょうか? 誰かが使っていた気がするのですが,意味を調べてみるとネガティブな意味が多くどうも違う気もするし,本当のところこういった使い方は出来ますか? ご存知の方よろしくお願い致します。

  • subclipseでコミットできない

    Eclipseでない別のツールでバイナリファイルを更新したのですが、Eclipseのパッケージエクスプローラのファイル名左のアイコンが、添付の画像の赤枠のアイコンとなり、commitしようとしても「最後のコミットからファイルの変更もしくは追加はありません」と出てしまい、コミットできません。 別のPCにバイナリファイルをコピーし、そのPCのEclipseのパッケージエクスプローラでバイナリファイルを参照すると、更新されたことを示す"*"のアイコンが付いており、正常にcommitできます。 この現象は必ず発生するわけではなく、過去2年で2回ほどです。 この現象のおかげで顧客へのリリース洩れが発生したことがあり、根本問題を解決しないことには業務に使えません。 以下の点でご存じの方、ご教授をお願い致します。 (1)添付の画像の赤枠のアイコンの意味は何でしょうか? (2)commitできなくなった理由(更新を検知できない理由)は何でしょうか? (3)この状態からcommitできるようにするにはどうすれば良いのでしょうか? Eclipseのバージョンは3.5(Pleadesを入れてます) Subclipseのバージョンは1.6.13です。 以上、よろしくお願いします。

  • コミットってどういう意味でしょうか?

    「結果にコミットする」 のコミットってどういう意味でしょうか?

  • コミットできなくなってしまいました。

    以前は仕事の内容に満足しており、興味のあることに携われる喜びがあり ワークライフバランスは充実していたのですが、 ここ数年、度重なるハラスメントを通して、 会社へ貢献する気持ちがどんどん萎えてしまい、 何にも協力したくない、そう思うようになってしまいました。 とはいえ、お給料をいただいているので、やるべきことはやっているのですが 以前のように、自分から働きかけたり、提案したり、という能動的な役割を この環境においてはしたくない、そう思うようになってしまっています。 能動的な働きをすることで、また標的になるのが怖いという気持ちや あまりにも世の中に通用しない独自の価値観が強すぎて、飽きれやしらけてしまう気持ちが 以前のようにコミットメントできない心情につながってしまっています。 どうにか気持ちを切り替えて、今の仕事を続けて行きたいという考えと 新しい仕事や興味を探して、環境を変えたいという考えがあります。 今の仕事を続けるには、どんな風に気持ちを切り替えたら良いと思いますでしょうか? 良いイメージや体験談をシェアしていただきたく存じます。 又、働く環境や生活環境を変えて、うまくいった方のお話しを教えていただきたいです。 追記 現在、処理中ですが、会社はハラスメントの事実を認め、謝罪をしてくれています。

  • コミットチャージ

    こんにちは。 windows 2000のタスクマネージャにあるコミットチャージってなんですか? ”コミット済みの仮想メモリ”と”使用可能なメモリ空間、または現在使用中のメモリサイズ”という2つの文をみつけましたが、この2つがつながらないようなきがします。 制限値や最大値、物理メモリとの関係など理解できません。 アドバイスよろしくお願いします。 また詳しく説明しているHPはあるでしょうか?

  • 結果にコミットするという言い方がわかりましたか

    あのコマーシャルの本体には興味がありませんので、嫌な音であわててチャンネルを変えることにしています。音より気持ち悪いのはコミットするという言い方です。コマーシャルとしての効果は評価されているようですが、皆さんは辞書などで確認する前から結果にコミットするという意味がわかりましたか。

  • 【ビジネスで使う「コミット」の意味】

    顧客とのコミット、チームメンバーとのコミット、 事業戦略のコミット 上記のように使うようですが、意味がわかりません。 ご存知の方がいらっしゃいましたら教えていただけるとありがたいです。よろしくお願いいたします。

  • コミットって簡単に言うと何?

    しすてむとか見るとコミットってありますよね? これが十分無いと動作が不安定になると思うんですが 簡単に言ってコミットって何を指す言葉なんでしょう?

  • svnserverを設置したがコミットできない

    現在、自分のwindows10のPCにSVNサーバを、下記のサイトを参照しながらインストール作業を行っています。 WindowsにSubversion 1.12サーバーを構築する https://blogs.osdn.jp/2019/06/14/subversion.html 最後まで進めて、新規に作成したリポジトリの"repos"というのをtortoiseSvnで svn://192.168.1.188/repos というURLでチェックアウトするとできるのですが、テキストファイル1個をコミットしようとすると、なぜか Error Commit failed (details follow): Error Authorization failed このようなメッセージが出てきてコミットが失敗します。 メッセージ内容でググってみたところ次のようなサイトが出てきました。 https://axion.sakura.ne.jp/blog/index.php?UID=1414755723 このサイトの内容から、svnserve.confの中身の一部に修正を加えないといけないとのことなのですが、 C:¥Apache24 このフォルダ内にsvnserve.confのファイルが見当たらないのですが、どのように解決したら良いかご存知の方いらっしゃいましたら、ご教示よろしくお願い致します。

  • TortoiseSVNにて、コミットができません。

    TortoiseSVNにて、コミットができません。 TortoiseSVNにて、右クリックからコミットを選択し、変更項目確認画面で編集したファイルを選択した上でOKボタンを押下しても、反応がありません。 (一瞬だけウインドウを表示するような振る舞いを見せますが、以後反応なしです。エラーも出ません。) この他、マージ・ロックの取得も同様の現象でできません。 なお、これらの現象は突然現れたものではなく、TortoiseSVN初回インストール直後から発生しています。 ただし、チェックアウトや更新、差分の表示などは正常にできます。 また、コマンド(svn commit)によるコミットは正常に実行できます。 さらに、別のクライアントからは、GUIによるコミットができます。 特定のクライアイント特有の問題のようですが、原因がわかる方いらっしゃいますでしょうか? <試したこと> ・ファイアーウォールを無効にする ・日本語化バッチなしで、TortoiseSVNを再インストールする ・リポジトリで管理するファイル数を1つにし、1ファイルのみのコミットを試みる(ファイルサイズは10KB程度) ・匿名ユーザからのリポジトリへの書き込みも許可する <利用環境> WindowsServer2008上に svnserverを構築しており、ネットワーク経由でクライアントからリポジトリにアクセスしています。 また、特定のクライアイントからのみできないと記載しましたが、各クライアイントのOSは全て同じWindowsXPです。