うまく意味を理解できません。
どなたか知っている方がいらしたら教えてください。
宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

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のタイミングは意外にも重要です。
長いばっかりで分かりにくかったかもしれませんが、参考になれば幸いです。頑張ってくださいね。
※表がずれて見にくいので、一旦メモ帳かなんかに貼り付けて読んでください。すみません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/11/02 16:09

データベースの種類によって記述方法が違うかも知れませんが


BeginTrans  'ビギントランス
CommitTrans  'コミット
RollbackTrans 'ロールバック
の3がっセットになります。主にトランザクション処理とでもいいましょうか
各内容は
ビギントランス:トランザクションの開始
コミット:ビギントランスから後の更新されたテーブルの更新
ロールバック:ビギントランスを実行した状態に戻す
っていう感じです。

テーブルの更新(追加、更新、削除など)をするときに
多く使用します。
これは、システムの整合性を保つためなどに大切です。

たとえば在庫管理のシステムで
入荷テーブル
出荷テーブル
在庫テーブル
があったとります。

入荷時は
入荷テーブル
在庫テーブル
を更新

出荷時は
出荷テーブル
在庫テーブル
を更新

となります。

各処理でエラーが発生したときに更新結果が途中までで終わってしまわないように
更新するときは
トランザクション処理を使用してデータの不整合を防ぎます。

※※※簡単な処理の流れ※※※※

ビギントランス

Select Case 更新処理
Case 正常更新

コミット

Case 異常終了

ロールバック

End Select

※※※※※※※※※※※※

またトランザクション処理は
データベースによってデータベースの種類って更新に制約が発生します。
どのような制約があるは、各ヘルプや専門書などで確認してください。
    • good
    • 0

データベースの時に使います。



例えば在庫管理のシステムがあって、在庫ファイルを更新して、出荷ファイルを
更新する処理があったとして

在庫ファイルを更新して出荷ファイルが書けなかった時に
在庫ファイルと出荷ファイルで不整合が発生します。
そこで異常を見つけた時にロールバック(なかったこと)し
データベースを戻します。
しかし1日の処理のどこまで戻すかを決めるのがコミットです。
コミットを切るとこれ以上は戻らなくて良いよと言うことです。
つまり
在庫ファイルを更新し出荷ファイルも更新したらコミットを切るのです。
こんなもんでどうでしょうか?
参考になれば幸いです
    • good
    • 0

データベースを利用する場合に使います。


データベースにレコードを書き込んだだけでは、反映されません。
commitを行うことによりその情報をデータベース上に反映させることができます。
何レコードかにまたがって情報を記録する場合、すべてのレコードが正しく書けた場合に、commitしてデータを確定します。
これとは異なり、途中で書き込みを失敗した場合、以前に記録したものも削除しないとデータの整合性が取れない場合もあります。このときはロールバック(ROLLBACK)を利用し、すべてなかったことにします。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

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

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

Aベストアンサー

コミットメントに思わず反応してしまいました。

"commitment"のコミットと私も考えます。
JIS Q9000:2000解説 によりますと、
誓約、約束、公約、確約、義務、責務、責任、関与、かかわり合い、参加、傾倒、深入りなどいずれの言葉においてもニュアンスを伝えきれないので、"commitment"はコミットメントと訳したとのことです。
コミットを日本語(漢語?)に訳した段階で微妙に異なるニュアンスになるようです。

正確さより、日本語(漢語?)訳にすることを優先するなら、職業柄「決意表明」に1票。

QプログラミングにおいてOrの使い方がいまいち理解できません。 どなたかご教授お願い致します。

プログラミングにおいてOrの使い方がいまいち理解できません。
どなたかご教授お願い致します。

Aベストアンサー

仮に、a or b であれば、
a 真、b 真 → 真
a 真、b 偽 → 真
a 偽、b 真 → 真
a 偽、b 偽 → 偽

となります。
一つでも真があれば、結果は真となります。

Qタスクマネージャーのコミットチャージ等の意味

WINDOWS XPのタスクマネージャー
のパフォーマンスを見たところ
コミットチャージ:396MB/1246MB
CPU使用率 5%
プロセス:30

コミットチャージの意味をおしえてください。
またハンドルの意味をおしえてください。
よろしくお願いします。


以下ある状態のデータ値
ーーーーーーーーーーーーーー
合計
ハンドル 6309
スレッド 294
プロセス 30

PF(ページファイル使用量)395MB

物理メモリ(KB)
522224

コミットチャージ(KB):
合計 405794
制限値 1276252
最大値 406616
となっていました
合計値の405794とかは絶えず値が変動

Aベストアンサー

私の方はWindows2000ですが、多分同じようなものだと。
タスクマネージャーのヘルプに書いてあります。以下それの丸写し。
・コミットチャージ
プログラムおよびシステムに割り当てられているメモリ。仮想メモリの使用により、コミットチャージの[最大値]は、物理メモリの上限を越える場合があります。

・ハンドル
ファイルまたはレジストリキーなどのリソースを、プログラムがアクセスできるように一意に識別するのに使う値。


以上ですが、ハンドルを使用したプログラム例としてはこのように使います(デルファイ言語)
[Delphi-ML:80751] Re: 別のソフトにクリップボードの内容を貼り付けたい

"** 鉄平" <tetupei@***.*******.ac.jp>
Fri, 20 Feb 2004 16:14:03 +0900

--------------------------------------------------------------------------------

単に動けばいいのであれば

SetForeGroundWindow(Hhan);//Hhan:ペーストしたいWindowsハンドル
keybd_event( VK_CONTROL, 0, 0 , 0 );
keybd_event( $56, 0, 0 , 0 ); //V Key
keybd_event( $56, 0, KEYEVENTF_KEYUP , 0 );
keybd_event( VK_CONTROL, 0, KEYEVENTF_KEYUP , 0 );

私の方はWindows2000ですが、多分同じようなものだと。
タスクマネージャーのヘルプに書いてあります。以下それの丸写し。
・コミットチャージ
プログラムおよびシステムに割り当てられているメモリ。仮想メモリの使用により、コミットチャージの[最大値]は、物理メモリの上限を越える場合があります。

・ハンドル
ファイルまたはレジストリキーなどのリソースを、プログラムがアクセスできるように一意に識別するのに使う値。


以上ですが、ハンドルを使用したプログラム例としてはこのように使いま...続きを読む

Q宜しくお願い致します。

宜しくお願い致します。
access2000におきまして
そのVBAにより イベントプロシージャーを作成するに際しまして
フォーム1のコマンドボタン1 コマンドボタン2を
連続して クリックするというコードを作りたいのですが
Do command button1 みたいな コードを探していますが
そういうものは なにに 相当しますか
いちおう
たとえばコマンドボタン1のプロパティで
イベントで イベントプロシージャーを開くときの
コードをコピペして
同様にコマンドボタン2のプロパティで
イベントで イベントプロシージャーを開くときの
コードをコピペして
両者を ひとつのコードとして
いっしょに 書いて
実行するということは 分かるし
それで できるのですが
そういうコードを 結合させる やり方ではなくて
openform フォーム1
みたいに
*** コマンドボタン1
みたいな そういう 関数は
ありますか

宜しくお願い致します。

Aベストアンサー

#1ははずしていたようです。
本題は以下でしたね。

>フォーム1のコマンドボタン1 コマンドボタン2を
>連続して クリックするというコードを作りたいのですが

プロシージャの中で

Call コマンド1_Click
Call コマンド2_Click

と、続ければいいのでは。

Qコミットの意味は?

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

Aベストアンサー

"commit" という言葉は、本来 "to obligate or pledge oneself [for a definite purpose]" という強い意思(意図)とそれに伴う行動を意味する言葉で、その言葉を使用する事自体にたいする強いコミットメント(commitment)が必要になります。

commit oneself on (in, to, into) something [何かに"commit" する]
事業を統括する立場でも、或いはチームに貢献する一員の立場でも、また個人の目標にむけて邁進する場合でも、「何かに"commit" する」ことにより、全心全霊を尽くして物事に臨むことが要求されます。ご質問にある様に「その事業にコミットする」がこの意味で使われた場合には、ご質問者のご解釈でよろしいでしょう。

commit an outcome(of a business or a project) [特定の案件や業績を"commit" する]
ところが、日本のビジネス界でカタカナ英語を多用する人々の間では、文脈上、その事業「に」コミットすることが、即ちその事業「を」コミットするという意味で解釈された場合、事業の業績(売上や利潤などの成果)に責任を持つ、ということになります。従って、そう「宣言」したにも拘らず期待通りの実績とならなかった場合のいわゆる「責任問題」(減俸や費用負担、配置がえ、降格など)がついて廻ることを覚悟する必要があります。日本にある外資系企業の方々が気やすく使って後で大変な目に遇われていた姿を今でも思い出します。

"commit" という言葉は、本来 "to obligate or pledge oneself [for a definite purpose]" という強い意思(意図)とそれに伴う行動を意味する言葉で、その言葉を使用する事自体にたいする強いコミットメント(commitment)が必要になります。

commit oneself on (in, to, into) something [何かに"commit" する]
事業を統括する立場でも、或いはチームに貢献する一員の立場でも、また個人の目標にむけて邁進する場合でも、「何かに"commit" する」ことにより、全心全霊を尽くして物事に臨むことが要求されます。...続きを読む

Qマクロについてどなたかご教授お願い致します。 全て同シートの作業です。 エクセルのセルコピーして値の

マクロについてどなたかご教授お願い致します。
全て同シートの作業です。
エクセルのセルコピーして値のみ貼り付けをするのですが、毎日貼り付けるセルが違うように設定したいのです。
C2が1日 D2が2日と毎日今日の日付に貼り付けたいです。マクロ記録ぐらいしか出来ない素人でございます。コピーする場所は毎回同じです。

Aベストアンサー

No3です。
すみません。セルのコピー&ペーストですね。
セルの値だけでなく、書式も含めてコピーされたいのなら、以下のようにしてください。
Option Explicit
Sub Macro1()
Dim colNo As Long
colNo = day(Date)
Range("A1").Copy
Cells(2, colNo).PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
End Sub
コピー元はA1セルにしています。これは、あなたの環境に合わせてください。

Qコミット(commit)について

SQL*PLUSをウィンドウ右上の×や「終了」でするとコミットされてしまいます。

SHOW AUTOCOMMITはOFFでした。

どういうことでしょうか?

Aベストアンサー

それはSQL*PLUSの仕様上の動作です。

ウィンドウ右上の×や「終了」することは異常終了とはみなされずコミットされてしまいます。

AUTOCOMMIT ONはDML文を実行するたびにCOMMITすることを意味します。もっと言えば、これがONになっている場合、ROLLBACKはできません。

ウィンドウ右上の×や「終了」はこれとは別の問題であり、制御する方法はありません。

Qマクロでエクセルに貼り付け、毎日今日の行を選択して貼り付けるようにさせたいのです。どなた様かお願い致

マクロでエクセルに貼り付け、毎日今日の行を選択して貼り付けるようにさせたいのです。どなた様かお願い致します。
C1からAG1まで日付順に1日、2日、3日…31日
貼り付けは2列目のセルに入力
1日ならC2に貼り付けます。

Aベストアンサー

以下のようにしてください。
-----------------------------------
Option Explicit
Sub Macro1()
Dim colNo As Long
colNo = day(Date)
Cells(1, colNo).Copy
Cells(2, colNo).PasteSpecial (xlPasteAll)
Application.CutCopyMode = False
End Sub

Qcommit a fudgeの意味を教えてください

ニュースの記事に、以下のような文章が出てきました。without committing a 'fudge' とはどういう意味でしょうか?
you can't specify me as being female without committing a 'fudge' at the very least.
http://abcnews.go.com/International/australian-lives-male-female-sex-change/story?id=12529909

Aベストアンサー

「(少しでも)ごまかし(でっちあげ、作り話)をすることなく」
でしょうか。

「男」とも「女」とも特定できない。
「少しでもでっちあげをすることなく、男にせよ、女にせよ、いずれかに私を特定することはできない」

QAccess VBA でのFor_Nextステートメントで使用例の意味が理解できず困っています

Access VBA の勉強を始めて間もないものですが、あるテキストのFor_Nextステートメント使用の一部分の意味がわかりません。教えてください。

Sub ループのネスト()
Dim i As Integer, j As Integer
Dim myStr As String
'九九の結果を表示する
For i = 1 To 9
For j = 1 To 9
myStr = myStr & i * j & " "
Next j
MsgBox myStr, , i & "の段"
myStr = ""
Next i
End Sub
以上の文面で(1)『myStr = myStr & i * j & " "』でmystrにmyStr & i * j & " "を代入する意味だとは理解できますがmystr&を右辺に記載する意味がわかりません。何故必要でしょうか?
(2)『mystr=""』は何故必要なのでしょうか?

Access VBA の勉強を始めて間もないものですが、あるテキストのFor_Nextステートメント使用の一部分の意味がわかりません。教えてください。

Sub ループのネスト()
Dim i As Integer, j As Integer
Dim myStr As String
'九九の結果を表示する
For i = 1 To 9
For j = 1 To 9
myStr = myStr & i * j & " "
Next j
MsgBox myStr, , i & "の段"
myStr = ""
Next i
End Sub
以上の文面で(1)『myStr = myStr & i * j & " "』でmyst...続きを読む

Aベストアンサー

Access VBAとあったのでどんな難しいことかと思ったら
これなら、VB,エクセルVBAでも動くないようだ。
エクセルを持っておれば
標準モジュールに張り付け、実行して
シートを見ると良くわかる。
Sub ループのネスト()
Dim i As Integer, j As Integer
Dim myStr As String
'九九の結果を表示する
For i = 1 To 9
For j = 1 To 9
Cells(i, j + 1) = myStr & i * j & " "
Next j
Cells(i, 1) = myStr & i & "の段"
myStr = ""
Next i
End Sub
&は文字列を結合するもの。
この場合エクセルのセルと違ってMsgboxなので1行で1回の表示にしているので1行分は文字列追加累積しているわけ。
これを使うときはある段階・単位で=””でクリアする。
次の行の文字列を作るに入る前に、前行のものは(同じ変数を使うがため)クリアしなければならない。
i*jは本来文字列の扱いだが、VBでは文字列化しなくても
MsgBoxやエクセルのセル、テキストボックスにセットできる。
>右辺に記載する意味がわかりません
Msgboxやエクセルのセルやテキストボックスにセットするとき
セット・表示する内容は、右辺です。

Access VBAとあったのでどんな難しいことかと思ったら
これなら、VB,エクセルVBAでも動くないようだ。
エクセルを持っておれば
標準モジュールに張り付け、実行して
シートを見ると良くわかる。
Sub ループのネスト()
Dim i As Integer, j As Integer
Dim myStr As String
'九九の結果を表示する
For i = 1 To 9
For j = 1 To 9
Cells(i, j + 1) = myStr & i * j & " "
Next j
Cells(i, 1) = myStr & i & "の段"
myStr = ""
Next i
End Sub
&は文字列を結合するもの。
この場...続きを読む


人気Q&Aランキング

おすすめ情報