Существует ли база данных SQL с открытым исходным кодом, которая имеет концепцию псевдостолбца Oracle «rowid»? - PullRequest
3 голосов
/ 03 мая 2009

Мне известно, что MySQL и PostgreSQL [1] не имеют , но не имеют такую ​​концепцию, поэтому мне интересно узнать, есть ли база данных SQL с открытым исходным кодом, которая имеет эту концепцию.

[1] Позже было отмечено, что PostgreSQL имеет псевдостолбец rowid.

Ответы [ 3 ]

5 голосов
/ 03 мая 2009

PostgreSQL имеет эту концепцию.

См. здесь для краткого списка псевдоколонок в PostgreSQL, из которых ctid представляет интерес для вас:

ctid (tuple identifier)

Идентификатор, который описывает физическое местоположение кортежа в базе данных. Пара чисел представлена ​​ctid: номер блока и индекс кортежа в этом блоке.

Это прямой аналог Oracle rowid.

Что касается MySQL, физическое расположение строки недоступно для внешнего интерфейса.

В MyISAM, rowid - это просто смещение файла от начала, и это то, что хранится в индексе.

В InnoDB таблицы имеют дизайн index organized, это означает, что они всегда имеют какой-то первичный ключ, а индексы для таблицы InnoDB используют этот PRIMARY KEY в качестве указателя строки.

Это также верно для Oracle таблиц index organized, для которых rowid не является физическим указателем на блок в файле данных, а скорее называется logical ROWID или UROWID

Если вы выберете ROWID из таблицы INDEX ORGANIZED в Oracle, вы увидите, что он имеет другой формат (что-то вроде *BAEBwPICwQL+). На самом деле это кодированное PRIMARY KEY значение.

Обратите внимание, что если вы не определили ни один столбец как PRIMARY KEY, MySQL создаст скрытый суррогат PRIMARY KEY, над которым у вас никогда не будет никакого контроля.

Вот почему вы всегда должны создавать какие-то PRIMARY KEY в таблице InnoDB: это бесплатно, и вы получаете контроль над столбцом.

0 голосов
/ 03 мая 2009

SQLite имеет автоматически увеличенный столбец «ROWID», доступ к которому можно получить с помощью ROWID, _ROWID или OID. Если вы зададите целочисленный первичный ключ, тогда они будут псевдонимами.

0 голосов
/ 03 мая 2009

если ни один из них этого не сделал, то никто другой этого не сделает.

...