- PR -

自動採番される値の取得について

1
投稿者投稿内容
cyan
会議室デビュー日: 2006/07/20
投稿数: 12
投稿日時: 2006-10-01 15:05
自動採番される値をサーバ内に保存するファイル名に設定し、ファイル名を一意にしようと考えています。
やりたいことは、
1.ユーザに登録画面を出す。
2.ユーザがファイルを選択する。
3.「登録」ボタンを押した際にデータベース上、一意になるようにファイルを登録する。
です。
自動採番は、データベース(MySQL 5.0)でid(自動採番する列名)で「AUTO_INCREMENT」を指定して行おうと考えたのですが、ここから先どのようにすればよいかが解りません。
自動採番されるのは、データベースへのinsert(update)時になると思っているのですが、その前の時点で登録するファイルにもこの採番された値を使用する為に、この自動採番される値を取得することは出来るのでしょうか?

よろしくお願いいたします。

さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2006-10-01 15:18
データベースに自動採番を指定した番号を、事前に取得するってのは、
明らかに矛盾してると思うんだけどなあ。

人間も同じだけど、特にコンピューターは、
一度にひとつのことしかできない作りになってます。

ファイルを登録するのは、データベースにレコードを登録したあと、
そのレコードから番号を取得して行うって方法を考えましょうよ。

<編集>
誤字とてにをはを修正orz

<追記>
「明らかに」は余計か。

[ メッセージ編集済み 編集者: さいくろう 編集日時 2006-10-01 16:09 ]
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-10-01 15:47
SEQUENCEをサポートするDBMS(PostgreSQLやOracle)なら可能です。
MySQLではINSERT後ならLAST_INSERT_ID関数で取れますが。

でも、ファイルを先に作る必要はないのでは?

1. トランザクション開始
2. DBにファイル管理情報をINSERT
3. LAST_INSERT_ID()でIDを取得
4. IDを名前に使ってファイルを作成
5. ファイル作成の成否でCOMMIT/ROLLBACK

ファイル送信で受け取った時点で一時ファイルに格納しているなら、
4.の操作をファイルの移動(リネーム)に変えるだけで対応できます。
cyan
会議室デビュー日: 2006/07/20
投稿数: 12
投稿日時: 2006-10-01 19:50
さいくろうさん、あしゅさん 有難うございます。

>データベースに自動採番を指定した番号を、事前に取得するってのは、
>明らかに矛盾してると思うんだけどなあ。
私も矛盾していると感じながらも方法があるものなのか知識が無い為、みなさんの意見が聞きたくて投稿しました。

ご回答頂いたように、一度、ファイル以外の情報を登録し、その時点で取得された自動採番のIDをご回答頂いた方法で取得するように作成してみようと思います。

ありがとうございました。



かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-10-02 02:10
目的はファイルの一意性でしょうか?
ファイルの一意性を保障するためなら、
タイムスタンプと重複したときのための識別子を
ファイル名にすればいいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)