2009-05-03 5 views
3

私はMySQLとPostgreSQL [1]はではないことを認識しています。はその概念を持っているので、そこには概念を持っているオープンソースのSQLデータベースがあります。オラクルの "ROWID"疑似カラムという概念を持つオープンソースSQLデータベースはありますか?

[1] PostgreSQLにはROWID疑似カラムがあることが後で指摘されました。

+2

これは、データベース全体を割り引くための非常に特殊な要求のようです。あなたが解決しようとしている特定の問題を投稿する場合、誰かが別の解決法を持っているかもしれません。 –

+0

あなたの質問は本当にROWIDかROWNUMについてですか?レコードのROWNUMは、問合せごとに異なりますが、ROWIDは異なります。 – DCookie

+0

私は実際にどのデータベースを使用するかを決めるつもりはありません。この質問は、私がオラクルの友人と話したことから得たものです。 私がROWIDかROWNUMを意味するかどうかは、私のOracleの友人がROWIDと言ったので、私はROWNUMを意味するものではないと仮定します。 –

答えて

5

PostgreSQLこの概念があります。

ctidのうち、PostgreSQLに疑似列の簡単なリストについては、hereを参照してください、あなたに興味がある:

ctid (tuple identifier)

データベース内のタプルの物理的な位置を説明識別子。 1対の数字はctidで表されます:ブロック番号とそのブロック内のタプルインデックス。

これは、Oraclerowidの直接の類似体です。

MySQLの場合、行の物理的な位置はフロントエンドでは使用できません。

MyISAMでは、rowidは、最初からオフセットされたファイルで、インデックスの葉に格納されています。 InnoDB

、テーブルは、彼らが常にプライマリキーのいくつかの種類があることを意味し、InnoDBテーブルに対する索引は、行ポインタとしてPRIMARY KEYことを使用することを、設計によってindex organizedあります。あなたがROWIDからを選択した場合

これもOracleindex organizedrowidは、データ・ファイル内のブロックへの物理的なポインタされていないテーブル、のではなく、そのような呼ばlogical ROWID、またはUROWID

にも当てはまりますINDEX ORGANIZEDテーブルがOracleにある場合は、別の形式(*BAEBwPICwQL+のようなもの)が表示されます。これは実際に符号化されたPRIMARY KEY値です。

PRIMARY KEYとして列を定義していない場合は、MySQLは制御できない隠しサロゲートPRIMARY KEYを作成します。

テーブルには、何らかの種類のPRIMARY KEYを作成する必要があります。無料で、その列を制御できます。

+0

それはありますか? 私はグーグルで答えを出し、PostgresQLにはそのような概念がないというフォーラム投稿があります。 –

+0

あなたが私を信じていない場合は試してみてください:) – Quassnoi

+0

ところで、OracleのROWIDでは、ROWID(レコードを含むデータブロックへの物理ポインタ)またはROWNUM(SELECTクエリから返されたデータセットの増分行番号)?これらは異なるものです。 – Quassnoi

0

いずれも実行していない場合は、それ以外は実行しません。

0

SQLiteには、ROWID、_ROWID、またはOIDを使用してアクセスできる自動インクリメント "ROWID"カラムがあります。整数プライマリキーを定義すると、エイリアスされます。

+0

オラクル・フィーチャーは、特定の照会の結果の行番号です。だからあなたがid descで注文すれば、最初の結果はまだrowid#1を持つでしょう。 –

+0

ああ、私はそれを理解していませんでした。そのためのユースケースはありますか(あなたが手で行うことはできませんでした)? –

+0

それはあなたがサブクエリを使用する場合、その構造をサポートしていませんデシベルでTOP(X)を取得する方法です:( SELECT * mytableはORDER BY interestingField )からWHERE ROWID> 101 –

関連する問題