Existe-t-il une base de données SQL open source qui utilise le concept de pseudo-colonne «rowid» d’Oracle?
Question
Je suis conscient que MySQL et PostgreSQL [1] n'ont pas ce concept. Je suis donc intéressé à découvrir une base de données SQL open source qui en contient le concept.
[1] Il a été ultérieurement indiqué que PostgreSQL ™ avait la pseudo-colonne rowid.
La solution
PostgreSQL
a ce concept.
Voir ici pour une brève liste des pseudocolonnes dans < code> PostgreSQL , parmi lesquels ctid
vous intéresse:
ctid (identificateur de tuple)
Identificateur décrivant l'emplacement physique du tuple dans la base de données. Une paire de nombres est représentée par le ctid: le numéro de bloc et l’index de tuple dans ce bloc.
C’est l’analogue direct du rowid
de Oracle
.
Comme pour MySQL
, l'emplacement physique d'une ligne n'est pas disponible pour le serveur frontal.
Dans MyISAM
, rowid
est simplement un fichier décalé par rapport au début, et c'est ce qui est stocké dans les feuilles d'index.
Dans InnoDB
, les tables sont indexées
par conception, ce qui signifie qu'elles ont toujours une sorte de clé primaire et les index sur un InnoDB
table utilise ce PRIMARY KEY
en tant que pointeur de ligne.
Ceci est également vrai pour les tables index organisées
de Oracle
, pour lesquelles un rowid
n'est pas un pointeur physique vers un bloc dans un datafile, mais plutôt un tel ROWID logique
, ou UROWID
Si vous sélectionnez un ROWID
dans une table INDEX ORGANIZED
dans Oracle
, vous verrez qu'il a un format différent (comme < code> * BAEBwPICwQL + ). Il s’agit en fait d’une valeur PRIMARY KEY
codée.
Notez que si vous n'avez défini aucune colonne en tant que PRIMARY KEY
, MySQL
créera un substitut caché PRIMARY KEY
sur lequel vous allez ne jamais avoir aucun contrôle.
C'est pourquoi vous devriez toujours créer une sorte de PRIMARY KEY
dans une table InnoDB
: c'est gratuit et vous obtenez le contrôle de la colonne.
Autres conseils
si aucun d'entre eux n'a fait cela, aucun autre ne le fera.
SQLite a un auto-incrémenté "ROWID". colonne à laquelle vous pouvez accéder à l'aide de ROWID, _ROWID ou OID. Si vous définissez une clé primaire entière, elle sera aliasée.