• ベストアンサー

自動で生成されるユニークID

postgreSQL8のwindows版を使っています。 テーブルにレコードを追加するとpostgresが自動で生成するユニークIDがあったかと思います。 insert後に出てくる insert ○○○○○という数字です。 これは普段selectで表示されませんが、このIDを表示させる方法、 ならびにこのIDを使ってそのレコードを削除する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ix6
  • ベストアンサー率100% (2/2)
回答No.1

OID(オブジェクトID)の事でしょうか? OIDなら SELECT oid FROM table_name で表示出来ます。 DELETEもUPDATEもWHERE条件で指定してあげれば出来ます。 DELETE FROM table_name WHERE oid = 123456

tukikageran
質問者

お礼

ありがとうございます! これです! 名称がわからずにネットでも検索がうまくいきませんでした。 これでようやく先に進めます。ありがとうございました。

関連するQ&A

  • Delphi データベースコンポーネント使用時におけるIDの自動生成に

    Delphi データベースコンポーネント使用時におけるIDの自動生成について  質問させていただきます。よろしくお願いします。現在DelphiでTQuery,TDatabase,TDataSourceを使用し、データベースに接続、DBGridでレコードを一覧表示し、DBEditとDBNavigatorでレコードの新規登録や編集が行えるようにしています。  ここでIDというフィールドを作り、これを主キーとして扱っていますが、レコードの新規作成時、自動的に連番で数値が挿入されるようにするにはどうすればいいのでしょうか?   ひとつ方法を思い付き実際やってみて今のところうまくいってはいるのですが、私が採択した方法だと少々問題があります。  exe起動時にレコードをソート、IDのフィールドで一番値の大きい数値を取得し、新規作成時にはその値に+1してDBEditに挿入するようにしています。しかしこれだと、いくらIDの値が小さいレコードを削除しても値の大きいレコードがある限り、新規作成時にIDとして挿入される値は大きくなるばかりなのです。  稚拙な文章で申し訳ありませんが、お教えいただければと思います。  よろしくお願いします。

  • テーブルの自動キー再割り当て

    以下sqlでテーブルhogeを作成し、idを自動キーにしています。 CREATE TABLE `hoge` ( `id` INT NOT NULL AUTO_INCREMENT, ........(省略).......... PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=sjis; このテーブルのレコード番号4を削除するとテーブルのidは 1,2,3,5(最終)になり, 新しいデータを追加(INSERT)するとidは 1,2,3,5,6(最終)とid番号4が欠番になります。 テーブルのidを1,2,3,4,5と続き番号に再割り当てして、新しいレコードがid番号6の挿入されるようにするにはどのようにすればよいでしょうか? sql文をご教示い頂きたくよろしくお願いします。

  • GENERATE_SERIESで二次元を自動生成

    PostgreSQLのGENERATE_SERIESで二次元のテーブルを自動生成したいです。 期待する出力は、 x | y --+-- 1 | 1 2 | 1 3 | 1 1 | 2 2 | 2 3 | 2 1 | 3 2 | 3 3 | 3 1 | 4 2 | 4 3 | 4 です。 自分で思い付いたのは SELECT GENERATE_SERIES(1, 3) AS x, GENERATE_SERIES(1, 4) AS y; ですが、これはもちろん、 x | y --+-- 1 | 1 2 | 2 3 | 3 | 4 を返します…。 ループが必要なんでしょうか…。 例を検索しても見つかりません…。 ストアドプロシージャを使っても構いませんので、 どうかよろしくお願いします。

  • postgresqlにて全レコードのupdate

    PostgreSQLの全レコードを順次Updateしたいのですが、 SQLの記述方法がわかりません。 [やりたいこと] ユーザ情報を保持しているテーブルに、新しく"ID_TMP"カラムを追加。 カラム"ID_TMP"に、ユーザIDを保持しているカラム"ID_INFO"の内容を書き込む。 コピーしたいレコードが単一の場合、次のSQLで可能だと思うのですが、 テーブルに保持している全レコードを順次処理する方法を教えてください。 update [テーブル名] set ID_TMP = (select ID from [テーブル名] where id = [ID名]); 宜しくお願いいたします。

  • LAST_INSERT_IDの使い方

    お世話になります。 早速ですが 1、トランザクション 2、テーブルAにインサート 3、テーブルBにインサート 4、テーブルCにインサート 5、コミット のような処理の時に、テーブルAでインサートしたレコードの IDをテーブルBとCに入れたいので、テーブルBに入れる時に LAST_INSERT_ID()を使うと思い通りの処理になりました。 しかし、テーブルCにインサートする時にはLAST_INSERT_IDの 値はテーブルBのインサート時のIDとなり、テーブルAのIDでは ありません、当然ですが。。 こういった場合、テーブルAのインサートIDを取得保持するには どのようにすればいいのでしょうか? どうか、ご教示ください。

  • auto_incrementを使ってIDを生成するには

    auto_incrementを使用してIDを作成したいのですがいまいちよく分かりません。 行いたいことは たとえばテーブルにid name textというカラムがあります。idカラムにauto_incrementを使用してIDである数字を生成したいのですが、nameカラムにある値ごとにIDを作成したいと思っています。 分かりにくいと思いましが以下のような感じです。 +----+-------+ | id | name | +----+-------+ | 1 | goo | | 1 | yahoo | | 2 | goo | | 1 | google| | 2 | yahoo | | 3 | goo | | 2 | google| +----+-------+ のようにnameの値ごとに生成したいと思っています。 このようなカラムを作成するSQLをお願いいたします。

    • ベストアンサー
    • MySQL
  • 自動的にコードを生成してくれるPHPエディター

    タイトルの通り、自動的にコードを生成してくれるPHPエディターを探しています。 イメージ的にはDreamweaverのサーバービヘイビアのように、 値を入力したり、選んだりするだけで、 レコードの挿入や レコードの表示といった よく使うコードを自動生成してくれるものです。 ご存じの方いましたら、教えてください。

    • ベストアンサー
    • PHP
  • 文字を含むIDの自動採番

    Access2013を使っています。 IDはテキスト型で、 A00000000 っていう書式なんですが、 新規レコード作成時のイベントで、ID自動採番(連番をふる)をしたいのですが、下記だと最初の1レコード(A00000001)以降がエラーになってしまいます。 Format(Nz(DMax("ID", "T_テーブル名"), 0) + 1, "\A00000000" ) もちろん、すでにあるIDがA00000001なので、DMaxが使えないんですが、どうやって分けてやったら良いのかわかりません。 やりたい結果は、新規レコード作成時に、IDが"A"&"8ケタの最大値+1"が自動に振られて、テーブルのIDフィールドにA00000001、A00000002・・・とデータ保持したいのです。 説明が判り辛くて恐縮ですが、ご教示お願いします。

  • もうちょっと賢いSELECT文が書けないものでしょうか

    初めまして、最近SQLをかじり始めたぺーぺーです。 効率の悪いSELECT文しか書けずに困っています。 下記のテーブルsoftware_tableから、 ・name列「oracle」 ・version値が最大 のレコードに含まれるid(=3)を拾ってきたいのですが、自分の頭では副問い合わせを使う方法か、ソートを使う方法しか思いつきません。 問題は副問い合わせ・ソートを使うと計算コストが大きくなってしまうことで、できることなら副問い合わせ・ソートを使わずに解決したいのですが、何か方法はないものでしょうか? よろしくお願い致します。 ----------------------------- software_table id name version 1 oracle 1 2 oracle 2 3 oracle 3 4 postgres 1 5 postgres 2 6 postgres 3 7 postgres 4 ----------------------------- ■副問い合わせを使った方法 SELECT id FROM software_table WHERE name = 'oracle' AND version = (SELECT max(version) FROM software_table WHERE name = 'oracle'); ■ソートを使った例 SELECT id FROM software_table WHERE name = 'oracle' ORDER BY version DESC LIMIT 1 OFFSET 0; -----------------------------

  • SQLServerのID列(自動連番)について

    PHPとSQL Serverでウェブアプリケーションを作っています。 例として、下記のようなテーブルを想定します。 テーブル名 users  user_id [int] ←主キー(IDENTITYプロパティを指定して、1ずつ増える連番)  name [char(10)] IDENTITYにより、INSERT INTO でuser_idの値を指定せずとも、一意のID値が割り振られます。 このINSERT処理は、PHPのmssql_queryでSQL文を発行しているのですが、 この時割り振られたuser_idが何であるかは、どうやって調べればよいのでしょうか。 IDENTITYを利用せず、INSERTする前にSELECT MAX(user_id)を発行して、 最も大きなuser_idを調べ、それを+1してINSERT、とすれば当然user_idは分かりますが、 せっかくIDENTITYの機能があるのに明らかに無駄な処理です。 どなたか分かる方、よろしくお願いします。

    • ベストアンサー
    • PHP