データベース板もあるが、あそこは過疎板だからこっちに立てました。
データベース関連のプログラミングならな〜んでもOK。
色んな話をしませまうる号。
探検
データベースプログラミング全般スレ
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
NGNG282デフォルトの名無しさん
2008/10/30(木) 03:15:28 DB超初心者からの質問です。
employeeテーブルがあるとします。
列はid(PK)とnameからなるとします。
社員を追加削除を繰り返しているとidも欠番が出たりすると思います。
欠番は別に良いのですが、社員を追加するときにidに、現在テーブルにないidを探してinsertしないとダメですよね?
このidをどうやって作るのですか?
IDENTITYプロパティーをつければシステムによっては自動インクリメント値ということを本で読みました。
でもシステムによっては・・じゃ、だめっすよね。
あとシステムが自動でつけたidを得る必要がある場合、どうするんでしょう。
結局自分でユニークな値を作るの?
employeeテーブルがあるとします。
列はid(PK)とnameからなるとします。
社員を追加削除を繰り返しているとidも欠番が出たりすると思います。
欠番は別に良いのですが、社員を追加するときにidに、現在テーブルにないidを探してinsertしないとダメですよね?
このidをどうやって作るのですか?
IDENTITYプロパティーをつければシステムによっては自動インクリメント値ということを本で読みました。
でもシステムによっては・・じゃ、だめっすよね。
あとシステムが自動でつけたidを得る必要がある場合、どうするんでしょう。
結局自分でユニークな値を作るの?
283デフォルトの名無しさん
2008/10/30(木) 03:44:55 >>282
> このidをどうやって作るのですか?
方法はいろいろとあると思います。
例)INSERT時の時刻、レコード件数、最大値
過去の最新のIDを格納するテーブルを作って、それを+1したものを新規ID
とするということを過去にやったことがあります。
この場合、同じ時刻の登録操作によってIDが重複する可能性があります。
当然INSERTは蹴られるわけですが、そのときはリトライすればよい。また
適正なロックをかけることにより、このINSERTの失敗をを避けることができます。
こういう面倒なことをしなくてもよいために、DBによってはユニークIDを生成する機能
を持っています。(現在のほとんどのDBは持っていると思います)
> あとシステムが自動でつけたidを得る必要がある場合、どうするんでしょう。
SELECTして見る。
> このidをどうやって作るのですか?
方法はいろいろとあると思います。
例)INSERT時の時刻、レコード件数、最大値
過去の最新のIDを格納するテーブルを作って、それを+1したものを新規ID
とするということを過去にやったことがあります。
この場合、同じ時刻の登録操作によってIDが重複する可能性があります。
当然INSERTは蹴られるわけですが、そのときはリトライすればよい。また
適正なロックをかけることにより、このINSERTの失敗をを避けることができます。
こういう面倒なことをしなくてもよいために、DBによってはユニークIDを生成する機能
を持っています。(現在のほとんどのDBは持っていると思います)
> あとシステムが自動でつけたidを得る必要がある場合、どうするんでしょう。
SELECTして見る。
284デフォルトの名無しさん
2008/10/30(木) 05:48:40 >>283
ご回答ありがとうございます。
DBが用意してくれているユニークなIDを使うのがよさ気ですね。
もしemployeeのidが他のテーブルから外部キーに指定されている場合、
employeeに挿入したときにDBがつけてくれるidを使って他のテーブルにも挿入とかしたい場合もあると思いますが、
このときはselectでなんとか、その挿入したレコードを引っ張ってくるんですね。
その場合、テーブルをロックしてダーティーリードを防ぐ必要があるということかなぁ。
初心者なのでアホな事を言っているかもしれませんが。
ご回答ありがとうございます。
DBが用意してくれているユニークなIDを使うのがよさ気ですね。
もしemployeeのidが他のテーブルから外部キーに指定されている場合、
employeeに挿入したときにDBがつけてくれるidを使って他のテーブルにも挿入とかしたい場合もあると思いますが、
このときはselectでなんとか、その挿入したレコードを引っ張ってくるんですね。
その場合、テーブルをロックしてダーティーリードを防ぐ必要があるということかなぁ。
初心者なのでアホな事を言っているかもしれませんが。
285デフォルトの名無しさん
2008/10/30(木) 06:14:33 >>284
INSERT INTOとSELECTサブクエリを使えばひとつのSQLステートメントで
idに値が入った行を作成することができます。
DBのユニークID生成機能にも欠点がありまして、データのExport/Importをするとき
少々厄介です。
INSERT INTOとSELECTサブクエリを使えばひとつのSQLステートメントで
idに値が入った行を作成することができます。
DBのユニークID生成機能にも欠点がありまして、データのExport/Importをするとき
少々厄介です。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か ★7 [ぐれ★]
- 山田邦子 ひょうきん族時代の年収は12億円「ただ税金が80%」 [muffin★]
- 東京の自販機そばに金塊4200万円分、何者かに持ち去られる…札幌の50代が8000万円振り込んだ後に上京して被害 [どどん★]
- 【東京】「家族で話題にして」 “世田谷一家殺害から25年 警視庁が呼びかけ [煮卵★]
- 【沖縄】開業4ヵ月でこれは…“国民の税金”投入の『ジャングリア沖縄』で見た衝撃的な光景と、モチベーションが低い一部スタッフの現状 [ぐれ★]
- 【鹿児島】容疑者は大学生。国道3号を横断中の母娘を車ではねる――「太陽がまぶしくて見えなかった」。20歳女を現行犯逮捕 日置署 [ぐれ★]
- 物価高やばすぎてデフレになることはもう一生ないから、中古、リニューアル、リサイクル、再利用、でしのぐしかない [943688309]
- 【朗報】「愛国保守党」の公約、ガチで日本再生の為ならアリだと話題に
- 真面目に生きていれば行く事はない場所
- 会社辞めようか悩んでるんだけど、どう思う?
- おさかなさんあつまれえ
- ルーナイト第1条!誰よりルーナ(・o・🍬)が好きな人~🙋🏡
