MySQLとPostgreSQL[1]にはその概念がないことを知っているので、その概念を持っているオープンソースのSQLデータベースがあることを知りたいと思います。
[1]PostgreSQLにはrowid疑似列があることが後で指摘されました。
PostgreSQLこの概念があります。
の疑似列の簡単なリストについては、ここを参照してください。PostgreSQLそのうちctid、興味のあるものは次のとおりです。
ctid (tuple identifier)データベース内のタプルの物理的な場所を説明する識別子。番号のペアは、ctid(ブロック番号、およびそのブロック内のタプルインデックス)で表されます。
Oracleこれは、の直接の類似物ですrowid。
についてMySQLは、フロントエンドの行の物理的な場所は利用できません。
でMyISAM、rowidは最初からオフセットされたファイルであり、それがインデックスリーフに格納されます。
ではInnoDB、テーブルはindex organized設計によるものです。つまり、テーブルには常に何らかの主キーがあり、InnoDBテーブルのインデックスはそれPRIMARY KEYを行ポインタとして使用します。
Oracleこれは、のindex organizedテーブルにも当てはまります。このテーブルの場合rowid、aはデータファイル内のブロックへの物理ポインタではなく、、logical ROWIDまたはUROWID
のテーブルROWIDからを選択すると、別の形式(のようなもの)であることがわかります。これは実際にはエンコードされた値です。INDEX ORGANIZEDOracle*BAEBwPICwQL+PRIMARY KEY
列をとして定義していない場合は、非表示のサロゲートが作成されPRIMARY KEY、それを制御することはできません。MySQLPRIMARY KEY
そのため、常にテーブルに何らかの種類のを作成する必要がPRIMARY KEYありInnoDBます。これは無料で、列を制御できます。
どちらもそれを行っていない場合、他の人はそれを行いません。
SQLiteには、ROWID、_ROWID、またはOIDを使用してアクセスできる自動インクリメントの「ROWID」列があります。整数の主キーを定義すると、エイリアスが作成されます。