¿Existe una base de datos SQL de código abierto que tenga el concepto de Oracle & # 8220; rowid & # 8221; pseudo-columna?
Pregunta
Soy consciente de que MySQL y PostgreSQL [1] no tienen ese concepto, por lo que estoy interesado en descubrir que hay una base de datos SQL de código abierto que sí tiene el concepto.
[1] Más tarde se señaló que PostgreSQL tiene la pseudo-columna rowid.
Solución
PostgreSQL
tiene este concepto.
Consulte aquí para obtener una breve lista de pseudocolumnas en < code> PostgreSQL , de los cuales ctid
es de su interés:
ctid (identificador de tupla)
El identificador que describe la ubicación física de la tupla dentro de la base de datos. Un par de números están representados por el ctid: el número de bloque y el índice de tupla dentro de ese bloque.
Eso es análogo directo del Oracle
del rowid
.
En cuanto a MySQL
, la ubicación física de una fila no está disponible para el front end.
En MyISAM
, rowid
es solo un desplazamiento de archivo desde el principio, y eso es lo que se almacena en las hojas de índice.
En InnoDB
, las tablas son index organizadas
por diseño, eso significa que siempre tienen algún tipo de clave primaria, y los índices sobre un InnoDB
table use esa PRIMARY KEY
como puntero de fila.
Esto también es cierto para las tablas Oracle
de index organizadas
, para las cuales un rowid
no es un puntero físico a un bloque en un archivo de datos, sino más bien un ROWID lógico
o UROWID
Si selecciona un ROWID
de una tabla INDEX ORGANIZED
en Oracle
, verá que tiene un formato diferente (algo así como < código> * BAEBwPICwQL + ). De hecho, este es un valor codificado de PRIMARY KEY
.
Tenga en cuenta que si no ha definido ninguna columna como PRIMARY KEY
, MySQL
creará un sustituto oculto PRIMARY KEY
sobre el cual nunca tenga ningún control.
Es por eso que siempre debes crear algún tipo de PRIMARY KEY
en una tabla InnoDB
: es gratis y obtienes control sobre la columna.
Otros consejos
si ninguno de ellos ha hecho eso, entonces otros no lo hacen.
SQLite tiene un incremento automático " ROWID " columna a la que puede acceder utilizando ROWID, _ROWID u OID. Si define una clave principal de un entero, será un alias.