[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 メーリングリストの案内