No.2ベストアンサー
- 回答日時:
こんにちは。
試してみれば、すぐにわかってしまうと思いますが・・・、
>>これはcommit前の仮テーブルのupdate処理の最中に行ロックがかかるとうことでしょうか?
はい。
>>ユーザBがupdate後、ユーザAがrollbackを行った場合は、ユーザAとBの行ったupdate処理は、それぞれどうなってしまうのでしょうか?
ユーザーBのUPDATEは、COMMITもROLLBACKもされてない状態です。
ユーザーAのROLLBACKは、何も起こりません・・・。
「ユーザAとBの行ったupdate処理は」←ユーザーAもUPDATE文を発行していたのなら、当然ROLLBACKされますよ(自分だけ)。
>>あと、ユーザAがupdateを行い、commitする前にユーザBはその表に対して参照することはできるのでしょうか?
テーブルの全ての行を参照可能です。
ただしユーザーAがCOMMITするまで、その変更は参照できません(反映されません)。
FOR UPDATEオプションでの参照は、その行を含めた場合は当然無効です。
(^^ゞ
こんにちわ。
分かりやすい説明ありがとうございます!
>テーブルの全ての行を参照可能です。
>ただしユーザーAがCOMMITするまで、その変更は参照でき>ません(反映されません)。
commit前の処理は表には反映されないんですね。
納得しました!
まだまだ未熟者ですが、また何かありましたらよろしくお願いします!
ありがとうございました。
No.5
- 回答日時:
こんにちは。
>>Oracle以外のDBではそのようなことはできないのでしょうか?
どちらもOracle固有のものです・・・。
ほかのDBでも、それぞれ何らかの機能は提供されてるかも知れませんが、その辺りはわかりません・・・。
(Oracle以外はあんまり詳しくないです、すみません)
将来DBが変更される可能性があるようなアプリケーションの開発には、使用しないほうがいいでしょう。
そもそもMySQLやSQLServerに、子トランザクションという概念があるのかどうかもわかりません・・・。
(サーバー変数は存在してますので、RETURNINGに似たようなものはあると思いますが・・・)
(^^ゞ
こんにちは。
色々教えて頂きありがとうございました。
Oracle以外にも同様の機能があるか調べてみます。
また何かありましたらご教授ください。
よろしくお願いします。
No.4
- 回答日時:
こんにちは。
>>returning・PRAGMAはSQLのコマンドなのでしょうか?
PL/SQLで使用します。
RETURNINGに関しては、埋め込みで使えたと思いますが、PRAGMAは無理ですね。
何かのプログラム(VBやJAVAなど)でSQLを使用している場合、DECLAREで無名PL/SQLブロックを埋め込んで使用できます。
これが結構便利なんですよ・・・。
(^^ゞ
この回答への補足
早速のお返事ありがとうございます!
>PL/SQLで使用します。
ということは、Oracle以外のDBではそのようなことはできないのでしょうか?
No.3
- 回答日時:
こんばんは。
まだ締め切ってないようですので、ちょっと追加を・・・。
自分自身で、あるテーブルをUPDATEした後、COMMITをする前にそのデータを参照(SELECT)した場合、
やっぱり更新結果は反映されてませんよ。
自分でUPDATEしたものをCOMMIT前に取得するには、returningを使います。
全体の処理で一部のSQL文だけをCOMMITしたい場合には、PRAGMAを使用します。
(^^ゞ
この回答への補足
お返事ありがとうございます!
>自分でUPDATEしたものをCOMMIT前に取得するには、>>returningを使います。
>全体の処理で一部のSQL文だけをCOMMITしたい場合には、PRAGMAを使用します。
returning・PRAGMAはSQLのコマンドなのでしょうか?
No.1
- 回答日時:
こんにちは。
「Transaction = Lock」じゃないですよ。
Update文を発行した場合、暗黙で行ロックがかかります。
テーブルロックではありません・・・。
(^^ゞ
この回答への補足
早速のお返事ありがとうございます。
>Update文を発行した場合、暗黙で行ロックがかかります。
これはcommit前の仮テーブルのupdate処理の最中に行ロックがかかるとうことでしょうか?
また上記質問の補足ですが、
ユーザBがupdate後、ユーザAがrollbackを行った場合は、ユーザAとBの行ったupdate処理は、それぞれどうなってしまうのでしょうか?
あと、ユーザAがupdateを行い、commitする前にユーザBはその表に対して参照することはできるのでしょうか?
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- docomo(ドコモ) SIMロック、またはSIMロック解除の仕組みをおしえてください。 5 2022/04/25 10:57
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
- UNIX・Linux shellscript内のコマンドを、sudo(toor)として実行 2 2022/09/23 15:05
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Android(アンドロイド) スマートフォン(Galaxy)の誤作動ロック画面が解除出来ない 1 2022/09/01 10:57
- Illustrator(イラストレーター) イラストレーターが買えない 1 2022/08/25 13:23
- 格安スマホ・SIMフリースマホ SIMカードのロックについて 1 2022/03/29 15:02
- 格安スマホ・SIMフリースマホ Y!モバイル転出後のSIMロック解除後 1 2023/01/09 20:14
- 国産バイク SUZUKI gsx250r/ABSについての質問です。 走行中のクラッチ操作等によるエンスト時はど 8 2023/01/01 20:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DELETE文でFROM句を省略した場合
-
列が255以上のCSVファイルをAcc...
-
PL/SQLでテーブル名に変数を使...
-
Viewにインデックスは張れ...
-
postgreSQLのint型は桁数指定が...
-
SQLでスキーマ名(所有者名)の...
-
【Access】外部結合を行う前に...
-
ORA-00959: 表領域'****'は...
-
ACCESS 複数テーブル・複数フィ...
-
目的のインデックスが使用され...
-
SQL2005 のクエリ文について
-
データ表示順序
-
複数テーブルのUPDATE
-
複数あるAccessのテーブルを一...
-
チェックボックスから、データ...
-
テーブルからのselectにおいて...
-
カラムの存在チェック
-
SQLの速度を調べるには…
-
SQLite C/C++ でのテーブル数...
-
Access2002 マスタテーブル変更...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DELETE文でFROM句を省略した場合
-
他の処理でselectさせないよう...
-
RDBのテーブル種類の違い
-
同じSELECT文同士でのデ...
-
object browser で処理を中断す...
-
[性能改善]AccessのDBに大量の...
-
accessでイベントを中止するよ...
-
統計情報の取得=コミットですか?
-
チューニング対象のSQLの見つけ...
-
PL/SQLの平行処理について
-
処理速度の見積もり時間について。
-
Truncate以外で高速にテーブル...
-
ActiveX DLLでのオラクルのトラ...
-
stored procedureの引数について
-
トリガーにてUTL_FILEパッケー...
-
Access2013で操作ログを残した...
-
Oracleから見たOracleの優位性(...
-
年度毎にシーケンスの初期化?
-
Oracleの欠点
-
処理が終わったり終わらなかっ...
おすすめ情報