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
: это бесплатно, и вы получаете контроль над столбцом.