¿Existe una base de datos SQL de código abierto que tenga el concepto de Oracle & # 8220; rowid & # 8221; pseudo-columna?

StackOverflow https://stackoverflow.com/questions/816234

  •  03-07-2019
  •  | 
  •  

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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top