Esiste un database SQL open source che ha il concetto di pseudo-colonna "rowid" di Oracle?
Domanda
Sono consapevole che MySQL e PostgreSQL [1] non hanno non questo concetto, quindi sono interessato a scoprire che esiste un database SQL open source che ha il concetto.
[1] In seguito è stato sottolineato che PostgreSQL ha la pseudo-colonna rowid.
Soluzione
PostgreSQL
ha questo concetto.
Vedi qui per un breve elenco di pseudocolonne in < code> PostgreSQL , fuori dal quale ctid
ti interessa:
ctid (identificatore tupla)
L'identificatore che descrive la posizione fisica della tupla all'interno del database. Una coppia di numeri è rappresentata dal ctid: il numero di blocco e l'indice di tupla all'interno di quel blocco.
Questo è l'analogo diretto del Oracle
del rowid
.
Come per MySQL
, la posizione fisica di una riga non è disponibile per il front-end.
In MyISAM
, rowid
è solo un offset di file dall'inizio, ed è quello che è memorizzato nelle foglie dell'indice.
In InnoDB
, le tabelle sono organizzate per indice
in base alla progettazione, ciò significa che hanno sempre una sorta di chiave primaria e gli indici su un InnoDB usa quel
PRIMARY KEY
come puntatore di riga.
Ciò vale anche per le tabelle Oracle
organizzate organizzate
, per le quali un rowid
non è un puntatore fisico a un blocco in un file di dati, ma piuttosto un tale logico ROWID
o UROWID
Se selezioni un ROWID
da una tabella INDEX ORGANIZED
in Oracle
, vedrai che ha un formato diverso (qualcosa come < code> * BAEBwPICwQL + ). Questo è in realtà un valore codificato PRIMARY KEY
.
Nota che se non hai definito alcuna colonna come PRIMARY KEY
, MySQL
creerà un surrogato nascosto PRIMARY KEY
su cui dovrai non avere mai alcun controllo.
Ecco perché dovresti sempre creare una sorta di PRIMARY KEY
in una tabella InnoDB
: è gratuito e ottieni il controllo sulla colonna.
Altri suggerimenti
se nessuno dei due lo ha fatto, allora nessun altro lo fa.
SQLite ha un "ROWID" incrementato automaticamente colonna a cui è possibile accedere utilizzando ROWID, _ROWID o OID. Se si definisce una chiave primaria intera di quella verrà aliasata.