Gibt es eine Open-Source-SQL-Datenbank, die das Konzept der Oracle „Rowid“ Pseudo-Spalte hat?
Frage
Ich bin mir bewusst, dass MySQL und PostgreSQL [1] Sie nicht haben das Konzept, also bin ich daran interessiert herauszufinden, von dort ist eine Open-Source-SQL-Datenbank, die das Konzept hat.
[1] Es wurde später darauf hingewiesen, dass PostgreSQL die Rowid Pseudo-Spalte hat.
Lösung
PostgreSQL
hat dieses Konzept haben.
Siehe hier für eine kurze Liste von Pseudospalten in PostgreSQL
, von denen ctid
für Sie von Interesse ist:
ctid (tuple identifier)
Die Kennung, die den physischen Standort des Tupels in der Datenbank beschreibt. Ein Paar von Zahlen, die durch die CTID dargestellt ist:. Die Blocknummer, und Tupelindex innerhalb dieses Blockes
Das ist direkter Analogon von Oracle
des rowid
.
Wie für MySQL
, physischen Standort einer Reihe ist für das vordere Ende nicht zur Verfügung.
In MyISAM
, rowid
ist nur eine Datei von Anfang versetzt, und das ist, was in dem Index Blättern gespeichert wird.
In InnoDB
werden Tabellen nach Design index organized
, das heißt, sie immer eine Art von Primärschlüssel hat, und die Indizes über eine InnoDB
Tabelle verwenden, die als Zeilenzeiger PRIMARY KEY
.
Dies gilt auch für Oracle
Tabellen des index organized
, für die ein rowid
zu einem Block in einer Daten-Datei kein physischer Zeiger ist, sondern eine solche genannt logical ROWID
oder UROWID
Wenn Sie eine ROWID
von einer INDEX ORGANIZED
Tabelle in Oracle
auswählen, werden Sie sehen, dass es ein anderes Format (so etwas wie *BAEBwPICwQL+
) hat. Dies ist in der Tat ein codierter PRIMARY KEY
Wert.
Beachten Sie, dass, wenn Sie keine Spalte als PRIMARY KEY
definiert haben, MySQL
eine versteckte Surrogat PRIMARY KEY
schaffen, über die Sie nie Kontrolle haben.
Aus diesem Grund sollten Sie immer eine Art von PRIMARY KEY
in einer InnoDB
Tabelle erstellen. Es ist kostenlos, und Sie die Kontrolle über die Säule erhalten
Andere Tipps
, wenn keiner von ihnen das getan hat, dann keine andere tun.
SQLite hat ein auto "ROWID" Spalte erhöht, die Sie ROWID, _rowid oder OID zugreifen können. Wenn Sie einen ganzen Zahl Primärschlüssel definiert als sie aliased werden.