[pgsql-jp: 30268] Re: SQLのMAX 関数について

Kenji ono ono @ fjct.fujitsu.com
2003年 6月 29日 (日) 23:21:14 JST


小野と言います。

> nullが帰ってきた場合に0を戻したいならばinsert文を
> 
> > INSERT INTO table VALUES(SELECT MAX(id)+1 FROM talbe);
> 
> INSERT INTO table VALUES(SELECT coalesce(MAX(id),0)+1 FROM talbe);
> :Snip
> あと、よけいなお節介ですが、新規レコード作成時にmaxで値を取得しようとす
> ると同時に新規作成が発生した場合、同一IDが発生してしまいます。
> 
> 今回の場合「IDが主キーではない」「IDに同じ値が発生してもオッケー」または
> 「一度に新規作成するのは必ず1クライアントのみ」ならばmaxでも良いのですが、
> そうでないならシーケンスを利用したID値生成したほうがいいです。

この場合、「table」をテーブルロックすれば大丈夫ですよね。
・「TABLE」をテーブルロック
・Insert文発行
・Commit発行
いかがでしょうか。



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