Existe um banco de dados SQL de código aberto que tem o conceito de “rowid” pseudo-coluna da Oracle?
Pergunta
Estou ciente de que o MySQL e PostgreSQL [1] fazer não tem esse conceito, por isso estou interessado em saber de que há um banco de dados SQL de código aberto que tem o conceito.
[1] Mais tarde, foi apontado que o PostgreSQL tem a pseudo-coluna rowid.
Solução
PostgreSQL
tem este conceito.
aqui para uma lista breve de pseudocolunas em PostgreSQL
, dos quais ctid
é de seu interesse:
ctid (tuple identifier)
O identificador que descreve a localização física da tupla dentro do banco de dados. Um par de números são representados pela ctid:. O número do bloco, e o índice de tupla dentro desse bloco
Isso é análogo direto de Oracle
de rowid
.
Como para MySQL
, localização física de uma linha não está disponível para o front-end.
Em MyISAM
, rowid
é apenas um arquivo deslocamento a partir do início, e é isso que é armazenada nas folhas de índice.
Em InnoDB
, mesas são index organized
pelo projeto, isso significa que eles sempre têm algum tipo de uma chave primária, e os índices sobre o uso da tabela InnoDB
que PRIMARY KEY
como um ponteiro linha.
Isto também é verdade para as tabelas Oracle
de index organized
, para o qual um rowid
não é um ponteiro física para um bloco em um arquivo de dados, mas sim uma tal chamada logical ROWID
, ou UROWID
Se você selecionar um ROWID
de uma tabela INDEX ORGANIZED
em Oracle
, você vai ver que ele tem um formato diferente (algo como *BAEBwPICwQL+
). Este é de facto um valor PRIMARY KEY
codificado.
Note que se você não tiver definido qualquer coluna como um PRIMARY KEY
, MySQL
criará um PRIMARY KEY
substituto escondida sobre as quais você nunca terá qualquer controle.
É por isso que você deve sempre criar algum tipo de PRIMARY KEY
em uma tabela InnoDB
:. É grátis, e você terá controle sobre a coluna
Outras dicas
Se nenhum deles ter feito isso, então há outros fazem.
SQLite tem uma auto incrementado coluna "ROWID", que você pode acessar usando ROWID, _rowid, ou OID. Se você definir uma chave primária inteiro do que eles vão ser alias.