Существует ли база данных SQL с открытым исходным кодом, в которой используется концепция псевдостолбца Oracle «rowid»?
Вопрос
Я знаю, что MySQL и PostgreSQL[1] делают нет У меня есть эта концепция, поэтому мне интересно узнать, существует ли база данных SQL с открытым исходным кодом, в которой есть эта концепция.
[1] Позже было отмечено, что в PostgreSQL есть псевдостолбец rowid.
Решение
PostgreSQL
есть такое понятие.
Видеть здесь для краткого списка псевдостолбцов в PostgreSQL
, из которых ctid
вас интересует:
ctid (tuple identifier)
Идентификатор, описывающий физическое расположение кортежа в базе данных.Пара чисел представлена ctid:номер блока и индекс кортежа внутри этого блока.
Это прямой аналог Oracle
's rowid
.
Что касается MySQL
, физическое расположение строки недоступно для внешнего интерфейса.
В MyISAM
, rowid
это просто смещение файла от начала, и это то, что хранится в индексных листах.
В InnoDB
, таблицы index organized
по замыслу это означает, что у них всегда есть какой-то первичный ключ, а индексы по InnoDB
таблица, используйте это PRIMARY KEY
как указатель строки.
Это справедливо и для Oracle
's index organized
таблицы, для которых rowid
это не физический указатель на блок в файле данных, а скорее так называемый logical ROWID
, или UROWID
Если вы выберете ROWID
из INDEX ORGANIZED
стол в Oracle
, вы увидите, что он имеет другой формат (что-то вроде *BAEBwPICwQL+
).На самом деле это закодированный PRIMARY KEY
ценить.
Обратите внимание: если вы не определили ни один столбец как PRIMARY KEY
, MySQL
создаст скрытый суррогат PRIMARY KEY
над которым вы никогда не будете иметь никакого контроля.
Вот почему вам всегда следует создавать что-то вроде PRIMARY KEY
в InnoDB
стол:это бесплатно, и вы получаете контроль над колонкой.
Другие советы
если ни один из них этого не сделал, то никто другой этого не сделает.
SQLite имеет автоматически увеличенный " ROWID " столбец, к которому вы можете получить доступ, используя ROWID, _ROWID или OID. Если вы укажете целочисленный первичный ключ, они будут псевдонимами.