データベースに格納される各行データにはアドレスがあり、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にアクセスできます。