データベースに格納される各行にはアドレスがあり、OceanBaseデータベースではRowidデータ型を使用してデータベース内の各行のアドレスを格納します。
Rowidには主キーなしテーブルのROWIDと主キー付きテーブルのROWIDが含まれます。UROWID(Universal Rowid)は、上記2種類のROWIDの格納をサポートします。
OceanBaseデータベースでは、各テーブルにROWIDという名前の疑似列があります。
疑似列は通常の列のように動作しますが、実際にはテーブルには格納されていません。疑似列に対してSELECT操作を実行できますが、その値に対してINSERT、UPDATE、DELETE操作を実行することはできません。疑似列はパラメータのないSQL関数にも似ています。パラメータのない関数は通常、結果セットの各行に同じ値を返しますが、疑似列は通常、各行に異なる値を返します。
主キー付きテーブルのROWIDは、各行データの主キー列とパーティションキーから仮想的に生成された列を組み合わせ、Base64エンコード変換して作成されます。
ROWID疑似列の値は、各行データのKey(主キー付きテーブルではPrimary Key、主キーなしテーブルではシステムが自動生成するシーケンス)をBase64エンコード変換したものです。ROWIDという予約語を列名として使用するSQLを使用することで、各行のRowidにアクセスできます。
主キーなしテーブルのROWIDは、tablet idと隠れた主キー列を組み合わせ、Base64エンコード変換して作成されます。ここで、tablet idと隠れた主キー列はどちらも64ビット整数型で表現できるため、主キーなしテーブルのROWIDの長さは固定されています。
ROWIDという予約語を列名として使用するSQLを使用することで、各行のrowidにアクセスできます。