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 ORGANIZED
Oracle
*BAEBwPICwQL+
PRIMARY KEY
列をとして定義していない場合は、非表示のサロゲートが作成されPRIMARY KEY
、それを制御することはできません。MySQL
PRIMARY KEY
そのため、常にテーブルに何らかの種類のを作成する必要がPRIMARY KEY
ありInnoDB
ます。これは無料で、列を制御できます。
どちらもそれを行っていない場合、他の人はそれを行いません。
SQLiteには、ROWID、_ROWID、またはOIDを使用してアクセスできる自動インクリメントの「ROWID」列があります。整数の主キーを定義すると、エイリアスが作成されます。