[hackers-jp: 155] Re: Fw: Re: [HACKERS] Adding MERGE to the TODO list (resend with subject)

井久保 寛明 ikuboh @ nttdata.co.jp
2004年 5月 10日 (月) 19:11:57 JST


井久保です。

On Mon, 10 May 2004 16:05:53 +0900
TANIDA Yutaka <tanida @ sra.co.jp> wrote:

> MERGE文(updateしてみて、無ければinsert)という命令を追加しようと言う意
> 図のスレッドです。こういう動作を求める声はたしかに多いような気もしますが
> 実際の所どうなんでしょう?

面白いですね。SQL2003 にあって、MySQL では REPLACE 構文ですか。

select ... for update でレコードの存在を調べて、該当レコードが
あれば update、なければ insert ってアプリを書いていたところを
merge 文 1つで書けるってことかな。

壊れたデータの修正とか、あまり遭遇したくない状況で使えそうな...。


> あと、以下の部分が気になります。
> 
> > I intend to release locks on subtransaction abort
> 
> 今手元にGray本がないので確かめてないのですが、Nested Transactionの場合は
> サブトランザクション中に取得されたロックは、そのトランザクションがabort
> しようがcommitしようが親トランザクションが終了するまで取得され続けなけれ
> ばならないと思っていたのですが、どうなんでしょうか?

Gray本をちょっとだけ見てみましたが、サブトランザクションでコミット
したときのロックは、親のトランザクションが継承しないといけないと
いうことしか書いてないですね。つまり、コミットしたときだけロックを
保持していればいいということですね。
# そんなにしっかり読んでないので、見落としているかも。。。

直感的に考えても、アボートした場合は、ロックを開放しても問題ないと
思います。

もし、アボートした場合もロックを保持し続けなければならないとすると、
1度アボートしたサブトランザクションを、アボート自体を取り消して、
もう1度先に進むことができるようなセーブポイントを実装するとき
ですね。

---
井久保 寛明 (Hiroaki Ikubo)
NTTデータ先端技術 (株) オープンソース技術部
E-mail: ikubo@intellilink.co.jp (E-mail: ikuboh@nttdata.co.jp)





hackers-jp メーリングリストの案内